![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 2 Dołączył: 1.10.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam pytanie odnośnie współpracy PDO z własnymi klasami. Ktory sposob powinno sie uzywac: 1. Polaczenie z baza poza klasa (wlasna) i przekazywanie do niej obiektu typu PDO. Wszystkie zapytania, operacje na danych z bazy odbywaja sie we wlasnej klasie. 2. Wszystkie operacje zwiazane z baza odbywaja sie poza wlasna klasa (zapytania, pobieranie danych), a do mojej klasy przekazuje juz np. pobrane z bazy dane. Do tej pory caly czas pisalem strukturalnie, ale postanowilem to zmienic i oto pierwszy dylemat jaki napotkalem na swojej drodze ![]() Ten post edytował Jawor 9.11.2008, 16:27:35 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Przekazuj obiekt PDO i wykorzystuj go w klasach służących do interakcji z danymi w bazie; w tzw. modelach.
Najprostszy przykład:
Są oczywiście lepsze rozwiązania ![]() Edit: Klasa news nie powinna mieć nic wspólnego z prezentacją danych. Może pobierać, kasować i zmieniać newsy w bazie, ale na przykład nie może wypluć HTML. Ten post edytował LBO 9.11.2008, 16:40:35 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 2 Dołączył: 1.10.2003 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Rozwiniesz ![]() Możesz przekazywać do klasy jakiś obiekt, który przetrzymuje w sobie więcej rzeczy niż samo PDO.
Ten post edytował LBO 9.11.2008, 16:50:09 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 2 Dołączył: 1.10.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ok. Dzieki za pomoc.
Pozdrawiam |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Z ostatnich testów i odrobiony teoretyzowania wyszło mi że nie bardzo opłaca się przekazywać context w konstruktorze bo wyobraźmy sobie następującą systuację:
I teraz przykłąd użycia $log'u wewnątrz metody $dbDrver'a
problem pojawia się kiedy chcemy za pomocą $log'u wywołać $dbDriver. Systuacja taka przytrafia się jeśli log ma zapisać cos do bazy danych. Ponieważ $dbDriver został utowrzony po obiekcie $log, log nie moze z niego korzystać. Rozwiązaniem tego może więc być metoda ustawiająca context:
Proszę o komentarz do takiego rozwiązania ponieważ ciągle jeszcze staram się to udoskonalić. Ten post edytował Black-Berry 9.11.2008, 17:32:05 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A nie tak:
? Czy nie jest wadą, że obiekty $dbDriver i $log będą niewidoczne dla całej apilikacji? Wygodne byłoy przecież w stopce aplikacji wywyołać sobie np:
a nie:
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ja za stopkę aplikacji uważam na przykład ostatni filtr kontrolera (coś jak pluginy front controlera w zendzie) i tam tez mam dostęp do kontekstu.
Jest hermetycznie, poza aplikacja nie ma dostępu do żadnych driverów, loggerów etc. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Racja. Twoje rozwiązanie jest bardziej eleganckie.
pozdrawiam. -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 23.02.2005 Ostrzeżenie: (10%) ![]() ![]() |
Dajcie już spokój z tymi kontekstami i kopiowaniem wszystkiego z Javy... Ja do tego wykorzystuje wzorzec Registry.
Wywołanie:
Ten post edytował markac 9.11.2008, 20:17:28 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Rejestr to tylko niechlujność architektów :/
Przeczy hermetyzacji OOP. Po to mam obiekt kontekstu, żeby go przekazywać gdzie chcę, a tam, gdzie nie - to go nie ma. Cytat Dajcie już spokój z tymi kontekstami i kopiowaniem wszystkiego z Javy... Ja do tego wykorzystuje wzorzec Registry. A nie wiesz, że poniekąd z Javy wywodzą się najlepsze praktyki programistyczne? Ten post edytował LBO 9.11.2008, 20:34:25 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Singletony są złe. A poza tym działają wolniej niż context.
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@BlackBerry:
A czy przypadkiem nie jest tak, że context powinien być singletonem? Przykład: http://www.symfony-project.org/api/1_1/sfC...hod_getinstance Chyba nie powiesz, że Symfony projektowały osoby nie znające się na OOP... |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No i w tym momencie masz z poziomu szablonu dostęp do bazy, o! A nie powiesz mi chyba, że to dobrze?
Zrobili to dla wygody tylko. edit Wynika to z architektury Mojavi, gdzie aplikacja jest uruchamiana z poziomu kontekstu, a ten trzeba jakoś pozyskać. Ten post edytował LBO 10.11.2008, 09:54:19 |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 23.02.2005 Ostrzeżenie: (10%) ![]() ![]() |
Tak się składa, że obiekt bazy danych ma być dostępny w większości przypadków wszędzie i przekazywanie tego uchwytu do każdego obiektu, np. przez konstruktor to dla mnie przerost formy nad treścią. A jak byście nie wiedzieli, kontekst także jest singletonem, czyli co, źle? Ależ skąd. Kontekstu nie używa się tylko po to, żeby zapewnić dostęp dostęp do wspólnych obiektów, które posiadają tylko jedną instancję. Używa go się tam, gdzie zachodzi możliwość uruchomienia skryptu w innym środowisku (kontekście), że tak to ujmę
![]() |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego na miłość Boga kontekst miałby być singletonem
![]()
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Kto Ci powiedział, że obiekt kontekstu ma być wszędzie?
To ja napiszę tak i się powtórzę - singletony PRZECZĄ hermetyzacji. Idealna aplikacja powinna wyglądać tak, że ją odpalasz jakimś obiektem aplikacji i koniec, wszystko się dzieje wewnątrz, a ty nie masz do niczego dostępu, zarazem zachowując pełną kontrolę. Niech szlak trafi ZF za rozpropagowanie tego cholernego wzorca. Zrobili zbiór klas, które działają tak luźno, że nie sposób nie korzystać z rejestru. Nie po to w architekturze oprogramowania wymyśla się nieprzepuszczalne warstwy (czyli nie mówię tylko o MVC), żeby jakiś rejestr odstawił wszystko do lamusa. Weźmy na przykład aplikacje GUI, które trzymają się MVC - gdyby we frameworkach wspomagających tworzenie takiego oprogramowania warstwy by rzeczywiście na siebie nie zachodziły to by było super - a tak nadal się zdarza, że żółtodziub siada do klawy i zasysa dane bezpośrednio w akcji np. Button.onClick (co zasadniczo jest widokiem, a raczej szablonem jeżeli przerzucić to na myślenie WWW). Rejestr to taki kontekst dla leniwych. |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
troche odgrzewam temat, ale przyznam, że cos mnie gryzie
jak poinien wygladac element, ktory jest trzymany jako $context?
bo z tego co rozumiem, $context to klasa, ktora zawieta min jakies odwolnie do PDO. czy nie lepiej przed wywolaniem instancji naszej klasy News() wywoalac instacje od PDO() i pozniej przekazac uchwyt do News() ? Sory, jesli cos pomieszalem, ale to moje poczatki w oop |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tak też można, jeżeli nie chcesz by News miał dostęp do czegokolwiek innego niż PDO to możesz o tak:
Ten post edytował LBO 22.11.2008, 17:13:17 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.06.2025 - 14:38 |