Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Data Access Objects
LoPMX
post 29.03.2004, 17:25:06
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 25.11.2003
Skąd: Białe Błota

Ostrzeżenie: (0%)
-----


Witam

Tak sie po prostu zastanawiam jak pisac zlozone DAO z relacja miedzy roznymi tabelami. Wedlug ogolnie przyjetych patternow (www..phppatterns.com) kazdy obiekt powinien zawierac metody jak najprostsze. Np obiekt News powinien wybierac newsy. Ale co jezeli chce aby dodatkowo wybieral dane dotyczace autora polaczone relacyjnie? Jak rozwiazac ten problem?


--------------------
Go to the top of the page
+Quote Post
rzseattle
post 29.03.2004, 18:44:41
Post #2





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Hey

Ja to rozwiazalem nastepujaco :

W mojej klasie oslugujacej tabele dodalem metode laczaca dwa obiekty tabel.
Wyglada to mniej wiecej tak.
[php:1:3e1a159c9f]<?php
$dbObject =& engine::loadExtinsion('dbObject');

$this->comment =& $dbObject->factory('comments');

// user table
$cols = array (
config::get('auth', 'id_col') => 'id' ,
config::get('auth', 'user_col') => 'user'
);

$this->user = $dbObject->factory(config::get('auth','table' ));

$this->user->clearSelectedColumns();

$this->user->addSelectColumn( $cols );

$this->comment->addObjectJoin('autor_id', 'id', $this->user, 'u') ;

$this->comment->addColumnAlias( array( 'u_user' => 'autor' ), 'u' );
?>[/php:1:3e1a159c9f]

1) Laduje klase db object.
2) Tworze obiekt tabeli komentarzy
3) okreslam nazwy kolumn dla tabeli urzytkownikow
4) tworze obiekt tabeli urzytkownikow
5) czyszcze kolumny wybrane dla tabeli user
6) dodaje nowe kolumny wraz z ich nowymi aliasami
7) lacze dwa obiekty tabeli i dodaje prefiks dla kolumn tabeli user, od tad tabela user jest polaczona z tabela komentarzy, alias kolumny userow to "u" a prefiks kolumn tabeli userow to "u_"
8) zmiaeniam alias kolumny user w tabeli u na bardziej przyjazny

Po takiej konfuguracji moge normalnie urzywac obiektu komentarzy tak jaby mial jeszcze dwie kolumny (autor, u_id)

przyklad uzycia to
[php:1:3e1a159c9f]<?php
$this->comment->get(5); //znajduje po kluczu

$this->comment->get( array('autor' => 'rzseattle') ); //po autorze
$this->comment->count();
//itd.
?>[/php:1:3e1a159c9f]


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
halfik
post 1.04.2004, 20:30:47
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


Cytat
...kazdy obiekt powinien zawierac metody jak najprostsze.

Istotnie, ale to się nie tyczy tylko obiektów. Ja generalnie uwazam, że prostota prowadzi do sukcesu na wszelkich płaszczyznach - nie tylko informatycznych.

Cytat
Np obiekt News powinien wybierac newsy. Ale co jezeli chce aby dodatkowo wybieral dane dotyczace autora polaczone relacyjnie? Jak rozwiazac ten problem?

Ale nawet gdyby wybierał dodatkowo dane o autorze newsa z innej relacji, to to nadal jest wybieranie newsów, bo po prostu potrzebujesz danych z innej tabeli aby mieć kompletny pakiet informacji potrzebny do wyświetlenia newsa. Co innego gdybys np. potrzebował danych o autorze, aby użyć ich np. przy generowaniu jakiś statów zupełnie nie związanych z newsami - w takim wypadku byłoby błedem umieszczanie tego w module od newsów.

P.S po polsku pattern to po prostu wzorzec (projektowy) - ładniej brzmi smile.gif
Go to the top of the page
+Quote Post
DeyV
post 1.04.2004, 20:55:30
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




halfik, oczywiście, że można tak zrobić, i często właśnie tak się robi. Jednak niesie to za sobą wiele zagrożeń, których nie mamy w innych językach, pozwalających na pisanie szczelniejszych klas.
Dlaczego to ma takie duże znaczenie? Ponieważ nie raz się zdaża, że podczas rozwoju programu dochodzi do przebudowy struktury bazy, wiec im mniej klas musimy w tym momencie modyfikować tym większa pewność, że będzie to zrobione dobrze.
Niestety - taki sposób pisania wiąże się ze znaczną komplikacja struktury powiązań pomiędzy obiektami w php.
Doprowadza też do spadku wydajności... Ale jednak się sprawdza, czego przykłądme są np. tutos, albo eZ.
A wraz z pojawieniem się php5 na rynku, taki sposób pisania ma coraz większe szanse na sprawdzenie.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
halfik
post 1.04.2004, 21:16:03
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


Cytat
Ponieważ nie raz się zdaża, że podczas rozwoju programu dochodzi do przebudowy struktury bazy...

Tutaj smiem się nie zgodzić. Jeśli wpierw dobrze zaplanujesz cały projekt, a w tym bazę to nie ma prawa już w czasie pisania kodu dochodzić do zmian struktury. A raczej, istnieje małe prawdopodobienstwo, że zmiany struktru bazy będą czeste - jak już to sporadyczne - i dlatego właśnie warto wiele czasu poświęcić na projektowanie przed przystąpienim do pisania. P.S Anglicy dla przykładu z tego co mi wiadomo 70% czasu poświęcają na projekt a pozostałe 30% na programowania. Myślę, że w tym miejscu warto się zastanowić smile.gif

Cytat
...wiec im mniej klas musimy w tym momencie modyfikować tym większa pewność, że będzie to zrobione dobrze.

Dokładnie tak jak piszesz. Ale nadal będę się upierał: dlaczego nie spróbować zminimalizować "pkt. zaskoczeń" poprzez zwiększenie ilości czasu poświęconej samemu projektowaniu ?

Cytat
Niestety - taki sposób pisania wiąże się ze znaczną komplikacja struktury powiązań pomiędzy obiektami w php.
Doprowadza też do spadku wydajności... Ale jednak się sprawdza, czego przykłądme są np. tutos, albo eZ.

hmm... ale jakbyś zrobił to samo strukturalnie też musisz odpowiednio wszystko powiązać, aby całość była sprawna i czytelna. A co do wydajności - taka jest cena za uproszczenie (bo tym jest całe OOP) progamowania. A pisząc o uproszczeniu: chodzi mi tutaj o fakt, że łatwiej jest przełożyć problem z rzeczywistości na język programowania, gdy mamy do dyspozycji OOP, niż gdybyśmy robili to strukturalnie.

Cytat
A wraz z pojawieniem się php5 na rynku, taki sposób pisania ma coraz większe szanse na sprawdzenie.

Czy będzie miał szanse? Ja bym zgadywał, że stanie się dużo bardziej popularny od strukturalnego i mało kto będzie się tutaj przejmował spadkiem szybkości działania oprogramowania mając przed oczami zalety OOP smile.gif Powiedzmy sobie szczerze: czy JAVA (najpopularniejszy teraz chyba język OOP) była by tak poteżna i popularna, gdyby była językiem strukturalnym? A teraz php, który jest de facto strukturalny - świetne narzędzie - zauważmy jaką siłą i popularnością dysponuje - i czy teaz gdy będzie w pełni obiektowy (choć nie bedzie to samo OOP, a hybryda), czy nie zyska jeszcze więcej zwolenników? winksmiley.jpg Ciekawie, ciekawie zapowiada się przyszłość PHPa po wejściu 5 hehe smile.gif
Go to the top of the page
+Quote Post
DeyV
post 1.04.2004, 21:29:38
Post #6





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Co prawda nie wiem, jak długo masz już styczność z programowaniem bardziej zaawansowanych systemów. Ja jednak, mimo że moje doświadcznienie nie jest jeszcze duże, a to co wiem o projektowaniu baz danych to własciwie wciąż przedszkole (np. największy mój system posiada około 20 mocno powiązanych ze sobą tabel - a na codzień spotykamy się w wielu przedsiębiorstwach z programi, które wykorzystują ich setki, więc i ich projektowanie wyglada całkiem inaczej) ale już przekonałem się, że praktycznie nigdy nie można do końca przewidzieć oczekiwań klienta.
Oczywiście dużo zależy tu od sstylu naszej pracy, oraz wykorzystanej metodyki projektowania, ale np. w przypadku projekotwania i pisania w oparciu o XP, to właściwie cały proces programowania polega na wprowadzaniu do systemu kolejnych zmian.

Cytat
Ja bym zgadywał, że stanei się dużo bardziej popularny od strukturalnego i mało kto będzie się tutaj przejmował spadkiem szybkości działanai oprogramowania mając przed oczami zlaety OOP

W to, że prograwanie OOP jest w tej chwili jednyną rozsądną alternatywą w przypadku programowania, nie wątpię. Nie wyobrażam sobie już pisania w inny sposób (dlatego troszkę np. boli mnie używanie strukturalnych języków np. w bazach danych)
Mówiłem natomiast tylko o takim podejściu do pisania klas, w którym 1 przykładowa tabela to 1 obiekt do jej obsługi, i nigdzie nie robi się od tego wyjątków. Przyznam szczerze, że teraz, mimo ze widziałem tego typu rozwiązania, nie wyobrażam sobie trzymania sie tej zasady w 100% .
Ale kto wie do czego dojdzie z czasem?


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 10:35