Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 25.11.2003 Skąd: Białe Błota Ostrzeżenie: (0%)
|
Tak wlasnie siedze i mysle sobie, bo chce przepisac swoja aplikacje z GOD classes na prawdziwe OOP. Chce aby kazda klasa reprezentowala jeden typ danych, np. klasa Articles ma metody tworzace obiekty klasy Article, ktora posiada z kolei metody zwracajace dane danego artykulu. Ale jest problem... Artykuly w bazie danych polaczone sa relacyjnie z Article_Type, oraz Category. I problem w tym, ze klasa Article_Type to tylko article_type z DB, Category to tylko category z DB. W templejcie potrzebuje wyswietlic artykuly wraz z ich kategoria oraz typem (np. test, recenzja czy cokolwiek innego). I nie wiem, jak mam polaczyc te obiekty. Moge oczywiscie zrobic wywolanie obiektu Category z Article, ale to za kazdym wyswietleniem danych tworzy jedno zapytanie do bazy o nazwe kategorii. Ma ktos jakis pomysl?
|
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 11.01.2004 Skąd: Gdynia Ostrzeżenie: (0%)
|
Cytat zastanawiam sie jak zdolacie zaprojektowac klasy zwlaszcza wybierajace dane z baz danych np. artykuly, wraz z powiazaniem relacyjnym owych tablic. czy zrobicie moze GOD classes, co jest bledem?
W A1 Internet poradziliśmy sobie w ten sposób, że połączyliśmy klasy generowane przez DB_DataObject (http://pear.php.net/package/DB_DataObject) z klasami - kontrolerami poszczególnych stron albo modułów na stronie. W praktyce wygląda to tak, że w oparciu o każdą z tabel w bazie danych automatycznie tworzona jest klasa - model (DAO), w której możemy nadpisać np. metodę wyciągającą, uaktualniającą albo usuwającą dane. Możemy też dopisać nowe metody. Zazwyczaj z DAO korzysta się w taki sposób: [php:1:b04b93a0cc] <?php $article=&new Model_Article; $article->get('id',2343); $article->find(); // tworzy zapytanie SQL i wykonuje je $article->fetch(); // pobiera pierwszy (i jedyny) z wyników print($article->title); // teraz możemy zobaczyć tytuł artykułu ?> [/php:1:b04b93a0cc] Tak mniej więcej wygląda kontroler strony wyświetlającej konkretny artykuł, tyle że bez ostatniej linii (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , bowiem obiekt $article przekazujemy do szablonu. A co zrobić jeśli chcemy wyciągnąć kilka artykułów? Wycwaniliśmy się i jeśli chcemy np. wyświetlić 10 ostatnich artykułów, dodajemy do klasy DAO taką oto metodę: [php:1:b04b93a0cc] <?php class Model_Article { // [...] function findLast($limit=10) { $this->selectAdd(); // w DB_DataObject kasuje listę pól $this->selectAs(array('id','title','time_added','abstract','author')); // wyciągamy tylko niektóre pola $this->orderBy('time_added DESC'); $this->limit($limit); $this->find(); } //[...] } ?> [/php:1:b04b93a0cc] Z kolei w klasie - kontrolerze strony wyświetlającej ostatnie wiadomości dajemy taki oto kod: [php:1:b04b93a0cc] <?php $article=&new Model_Article; $article->findLast(); $this->publish('article',$article); // tutaj przekazujemy obiekt $article do szablonu ?> [/php:1:b04b93a0cc] Szablon zaś wygląda tak: [xml:1:b04b93a0cc] <div id="articlelast"> <dl> {while $article->fetch()} <dt> {$article->title}<br /> <small>{$article->time_added}</small> </dt> <dd> {$article->abstract} </dd> {/while} </dl> </div> [/xml:1:b04b93a0cc] Powyższy szablon wykorzystuje naszą klasę A1_Template (znaną też jako Template_A1), którą niedługo udostępnimy na licencji LGPL. Powiązaniami relacyjnymi tabeli article z innymi tabelami zająć się może DB_DataObject. Związane z tym metody wywołać można w klasie - kontrolerze strony albo ewentualnie nadpisanej metodzie w klasie DAO. Jeśli ktoś zna lepszy sposób na rozwiązanie tej kwestii, ma u mnie zimne piwo (lub czasopisma). |
|
|
|
LoPMX Object Oriented Programming - i jego pułapki. 27.11.2003, 18:17:31
bumelang Swojego czasu trochę nad tym z kumplem debatowaliś... 30.11.2003, 19:57:58
halfik mnie z kolei interesuje ciut inne zagadnienie: czy... 5.12.2003, 08:49:57
LukaszLenart Pomysle, ze masz system ktory generuje jakies rapo... 6.12.2003, 23:42:15
halfik tak, wiem. znam zalety programowania obiektowego, ... 7.12.2003, 12:16:55
Seth Szybsze jest programowanie strukturalne.
OOP nie ... 7.12.2003, 13:06:53
DeyV Na szczęscie te róznice są na tyle marginalne, że ... 7.12.2003, 14:22:39
LoPMX zastanawiam sie jak zdolacie zaprojektowac klasy z... 7.12.2003, 14:25:44
halfik CytatOOP nie jest natywne w php. Mimo, ze posiada ... 7.12.2003, 15:37:34
Użytkownik Programowanie obiektowe bardziej pasuje mi do porz... 7.12.2003, 16:20:16
halfik oj, jest potrzebne - jezyki obiektowe to przyszlos... 7.12.2003, 18:06:57
Użytkownik Cytatoj, jest potrzebne - jezyki obiektowe to przy... 8.12.2003, 19:38:10
Seth Pisze (ezPublish, Galaxia, Ambivalence, binaryclou... 8.12.2003, 20:00:19
halfik no ale nawet pomijajac juz duze aplikacje. wezmy p... 8.12.2003, 20:42:21
LukaszLenart Jedna rzecz to prostota zmian, a druga to mozliwos... 9.12.2003, 09:23:06
Pathfinder Witam
Swoj maly system buduje tylko na klasach. S... 30.12.2003, 04:38:43
LukaszLenart A czy mozesz udostepnic swoje rowiazanie do wgladu... 30.12.2003, 07:18:01
radziel CytatWitam
Swoj maly system buduje tylko na klasa... 30.12.2003, 09:54:54
Pathfinder CytatA czy mozesz udostepnic swoje rowiazanie do w... 30.12.2003, 13:44:35
lukaswoj Ja jestem zdecydowanie za OOP.
Zgadza się, że w PH... 2.01.2004, 23:53:19
Nalfein][WR Dokładnie. W całej rozciągłości zgadzam się z luka... 3.01.2004, 12:26:27
bumelang Cytat[WR"]Brakuje jednak tej wielowątkowości w PHP... 6.01.2004, 00:18:49
a1internet Cytatphp ma chyba za dużą narośl kompatybilności, ... 12.01.2004, 00:19:32
bumelang CytatCytatphp ma chyba za dużą narośl kompatybilno... 13.01.2004, 10:59:47
halfik CytatReausumując - doceniam rolę obiektów w tworze... 15.01.2004, 08:41:42
cagrET Cytat... upieranie sie przy strukturalnym nie jest... 15.01.2004, 20:48:41
patrycjusz CytatCytat ... upieranie sie przy strukturalnym ni... 15.01.2004, 21:57:46
cagrET Patrycjuszu nie zrozumiales o co mi chodzilo (moze... 15.01.2004, 23:19:50
trax Dobre funkcje też mogą być rozwiązaniem 7.02.2004, 12:49:40
Seth Mozna tez uzywac 286 i dyskietek zamiast tydsku, t... 8.02.2004, 22:42:39
keedy ja tez pisze swoj maly systemik na oop ;p ale wole... 28.09.2004, 01:17:59
Yarecki Cytat(Seth @ 2004-02-08 23:42:39)Pewnych rzec... 28.09.2004, 07:26:39
hawk Cytat(Yarecki @ 2004-09-28 07:26:39)Programow... 28.09.2004, 11:15:59
e-Gandalf Geez... jaka bzdura...
Jak napisal hawk: nie mozna... 28.09.2004, 14:10:04
Yarecki Wypowiedzi na forum nie muszą być obiektywne, bo n... 28.09.2004, 15:24:01
hawk Ludzie mają też problemy z programowaniem struktur... 29.09.2004, 09:19:04
kubatron Seth: Czy ten Aspect Oriented Programing (AOP) będ... 1.10.2004, 06:50:27
Bora na necie jest gdzies przyklad programow napisany a... 1.10.2004, 10:54:20
Krolik Cytat(hawk @ 2004-09-29 08:19:04)Ja np najpie... 17.11.2004, 10:11:44
hawk 1) php a Java to jest, niestety, gigantyczna przep... 17.11.2004, 11:56:35
Krolik @hawk: wiem ze moze jestem niepoprawnym optymista,... 17.11.2004, 14:08:22
DeyV ale, do %#$^%, chłopie. Jak tak bardzo lubisz... 19.11.2004, 21:35:05
Krolik @DeyV:
Przecież ja nikogo nie odmawiam od pisania ... 20.11.2004, 10:56:55
DeyV Ok, peace Rzeczywiście - "trochę" sie u... 20.11.2004, 11:19:47 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 07:12 |