![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
mam taką klasę
i pozniej sposob wykorzystania tego
mam pytanie. czy mozna ją tą zbudować ? czy uzycie obiektu klasy PEAR:: DB i przekazanie jej do innej klasy w powyzszy sposob jest prawidlowe ? Czy wogole warto uzywać pakiet PEAR:: DB cyz moze cos innego ? Drugie pytanie. Czy reprezentawac dane autora jako tablice czy raczej stworzyc osobne zmienne na np. pole imie, nazwisko, email, ktore bedą reprezentowac kolumny w tabeli ? Ten post edytował become 28.11.2007, 13:22:02 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 398 Pomógł: 10 Dołączył: 24.11.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ja mam osobno Data Objects i Data Access Objects. Data Objects przechowuja tylko dane, a Data Access Objects pobieraja dane z bazy i na ich podstawie zwracaja tablice wypelnionych danymi z bazy Data Objects czyli na przyklad:
Co do DB to uzywam PDO, ma chyba taka sama funkcjonalnosc jak PEAR:DB, a jest wbudowane w PHP 5 i obiekt DB tworze sobie w klasie bazowej dla Data Access Object:
Korzystam z tego tak:
Jezeli w przyszlosci chcialbym zmienic PDO na PEAR:DB to zmieniam to tylko w klasie bazowej dla modelu ... ewentualnie wyrownuje niespojnosc w API obu bibliotek piszac sobie fasade DB_Adapter ktory korzysta z PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B ale ma API identyczne jak PDO. Zmiana biblioteki DB odbywa sie bez naruszenia pozostalych klas i tylko w klasie bazowej dla Data Access Objects Ten post edytował NoiseMc 28.11.2007, 15:12:41 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
aaa kumam, czyli proponujesz stworzyc klase reprezentujaca model danych usera oraz osobno klase reprezentujaco sam user.
a klasa model usera bylaby rozszerzeniem klasy bazowej model. To ma sens jezeli zapytania sformatujesz tak jak napisales, bo np. w PDO nie ma mozliwości stworzenia zapytan tak jak w PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Np. w PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B w zapytaniu można stosować znak zapytania, ktory zostaje zamieniony na odpowiednie wartosci z tablicy parametrów, ktorą to tablice przekazujesz do metody np. getAll. No ale to szczegol. A jak reprezentowac dane w klasie? Np. jezeli mam USER'a, który w bazie SQL ma imie, nazwisko, email To czy lepiej jest w klasie USER utworzyć jedną zmienną, która będzie przechowywać tablice zawierajacą wszystkie informacje na temat usera, czy w klasie stworzyć osbne zmienne dla imie, nazwisko, email i podstawić do nich dane z wyniku zapytania ? Ten post edytował become 28.11.2007, 15:58:42 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 398 Pomógł: 10 Dołączył: 24.11.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ja jestem za tym zeby kazdy rekord z bazy byl reprezentowany jako obiekt z wlasciwosciami ... jakos tak bardziej mi czysto i ladnie wyglada.
Co do znakow zapytania to pewnie masz na mysli paramertyzowane zapytania ... i tak tez jest to mozliwe w PDO na dwa sposoby, wiecej tutaj: http://de2.php.net/pdo-prepare. U mnie to wyglada tak:
Ten post edytował NoiseMc 28.11.2007, 16:28:36 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Np. w PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B w zapytaniu można stosować znak zapytania, ktory zostaje zamieniony na odpowiednie wartosci Poczytaj http://pl.php.net/manual/en/ref.pdo.php w szczególności Example#7 Repeated inserts using prepared statements. A jak reprezentowac dane w klasie? Np. jezeli mam USER'a, który w bazie SQL ma imie, nazwisko, email To czy lepiej jest w klasie USER utworzyć jedną zmienną, która będzie przechowywać tablice zawierajacą wszystkie informacje na temat usera, czy w klasie stworzyć osbne zmienne dla imie, nazwisko, email i podstawić do nich dane z wyniku zapytania ? Zrób tak jak napisał Ci ~NoiseMC. W klasie User opisz z czego składa się obiekt użytkownika (np. private $login, private $password itd), utwórz konstruktor, dopisz gettery i settery i w zasadzie to tyle (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Natomiast w UserDb przechowuj statyczne metody pobierające dane z bazy i zwracające obiekty typu User (lub tablice obiektów). // heh, ciut za późno no ale niech już zostanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ten post edytował phpion.com 28.11.2007, 16:34:03 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 398 Pomógł: 10 Dołączył: 24.11.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Wlasnie dobrze ze dodales, jeszcze gettery i settery mozna dopisac do klas Data Objects ale to jest juz zupelnie inny temat. (Przydatnosc getterow i setterow)
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pisanie getterów i setterów może wydawać się upierdliwe i zbędne (można przecież skorzystać z __get() oraz __set() lub po prostu określić składowe jako public (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) jednak przynosi wiele korzyści, o których poczytasz w linku podanym przez ~NoiseMC. Od siebie dodam jeszcze, że podział modelu na User oraz UserDb jest realizowany np. przez Propel'a (komunikacja z bazą zapisana w UserPeer). Dla mnie osobiście takie rozdzielenie modelu na 2 klasy jest jak najbardziej logiczne. Masz klasę reprezentującą dany obiekt oraz klasę do manipulowania nim (Create Retrieve Update Delete). |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Cytat Od siebie dodam jeszcze, że podział modelu na User oraz UserDb jest realizowany np. przez Propel'a (komunikacja z bazą zapisana w UserPeer) Szkoda tylko jednej rzeczy - słabej zarządzalności tą klasą. Nazwa bazy danych i tabeli zapisana na sztywno w stałej. Gdy zmianisz nazwę bazy danych, to automatycznie musisz generować model od nowa - jest to lekko irytujące podczas fazy testowej. |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Szkoda tylko jednej rzeczy - słabej zarządzalności tą klasą. Nazwa bazy danych i tabeli zapisana na sztywno w stałej. Gdy zmianisz nazwę bazy danych, to automatycznie musisz generować model od nowa - jest to lekko irytujące podczas fazy testowej. Fakt, zgadzam się, chodziło mi tylko o rozdzielenie modelu na 2 klasy. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Widzać, że macie spore pojęcie o OOP. Ja dopiero zacząłem się uczyc. Dzieki za info.
Korzystam z tego tak:
no dobra. a czy nie lepiej byloby metody klasy Products_Model stworzyc jako statyczne i wywolywac bezposrednio z klasy ?
Rozumiem ze w tym przypadku model produktow stanowi wzorzec fabryki ? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 14:57 |