![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 27.04.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
jestem wlasnie w trakcie pisania CMS - obiektowo i mam nstępujące problemy:
1) mam modele zbudowane tak, że np. użytkownik (jego klasa - User) składa się z podklas takich jak (UserId, UserName itd...) - a każda z tych podklas dziedziczy po klasie DataField - która odpowiada za wyciąganie i przetwarzanie kolenych pól w tabelach bazy danych. Gdy chcę zapisać użytkownika wywołuję odpowiednie metody we wszystkich jego podklasach i dzięki temu zapisane zostają wszystkie jego dane itd... - zrozumiałe Ale co zrobić, gdy chcę dodać nowego użytkownika? Czy mam zrobić tak, żeby w klasie User była odpowiednia metoda zgłaszajaca zapytanie do bazy danych czy jakoś inaczej? Czy jest ktoś na tym forum, kto ma coś takiego napisanego i mógłby mi to tu napisać? - albo przyjanmniej podesłać jakieś opracowanie... 2) czy widoki powinny się zagnieżdzać analogicznie do modeli? 3) czy można robić kilka kontrolerów 4) co to są akcje - bo często piszecie "akcje/widoki" - co to jest widok to wiem... 5) co to jest agregacja i czym różni się od asocjacji? -------------------- Klasy, obiekty, metody, właściwości itd... - pomocy!!!!
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 0 Dołączył: 2.01.2004 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Jestem w stanie tylko pomóc w zakresie punktu nr 5.
Polecam przeczytanie tego artykułu: Object Oriented php - jeśli tylko znasz angielski ![]() To co napiszę, będzie tłumaczeniem jednego z akapitów tego artykułu. Asocjacja jest poprostu powiązaniem dwóch klas. A agregacja jest typem asocjacji więc chyba chodziło Ci o porównanie dwóch typów asocjacji: agregacji i kompozycji. Mamy klasę A i klasę B. Jeśli klasa A korzysta z metod klasy B to już mamy asocjację. Jeśli klasa B nie wie nic o klasie A, czyli nie korzysta z jej metod a tylko daje się wykorzystywać przez klasę A to mamy do czynienia z asocjacją jednokierunkową. Klasa A jest świadoma istnienia klasy B i korzysta z jej metod. Jeśli zarówno klasa A korzysta z metod klasy B i klasa B korzysta z metod klasy A (czyli klasa B jest świadoma istnienia klasy A) - to asocjacja jest obustronna. Generalnie należy dążyć do minimalizowania asocjacji obustronnych. W OOP ważne jest kapsułkowanie/hermetyzacja obiektów, więc chodzi o to żeby dana klasa skupiała się tylko na swoich zadaniach i wiedziała o otaczającym świecie tylko tyle ile musi, dzięki takiemu podejściu łatwo jest potem dany element zmienić, wymienić czy cokolwiek innego ![]() ![]() Ale się rozpisałem, no ale to nie wszystko. Agregacja - występuje wtedy, gdy klasa A zawiera w sobie i korzysta z metod klasy B. Jeśli obiekt klasy A przestaje istnieć nie oznacza to końca istnienia klasy B. Jako przykład w kodzie php: [php:1:437971f28a] <?php // klasa dostepu do bazy danych $objDatabase = new DatabaseLayer(); // jakiś inny obiekt $objCar = new Car($objDatabase); // tutaj coś się dzieje w obiekcie $objCar // niszczymy obiekt unset($objCar); // obiekt $objDatabase nadal istnieje i można go używać ?> [/php:1:437971f28a] Kompozycja - występuje wtedy, gdy klasa A zawiera w sobie i korzysta z metod klasy B. Jeśli obiekt klasy A przestaje istnieć oznacza to koniec istnienia klasy B. Klasa A jest odpowiedzialna za stworzenie i zniszczenie obiektu klasy B. Jako przykład w kodzie php: [php:1:437971f28a] <?php // konstruktor klasy Car tworzy i przypisuje do wlasciwosci $engine obiekt klasy Engine $objCar = new Car(); // tutaj coś się dzieje w obiekcie $objCar // niszczymy obiekt // destruktor obiektu Car niszczy najpierw obiekt klasy Engine unset($objCar); ?> [/php:1:437971f28a] W przypadku kompozycji widać, że samodzielny obiekt klasy Engine na nic by nam sie nie przyadł, dlatego tworzony jest przez obiekt klasy Car i używany jest tylko przez niego po czym jest niszczony w momencie, kiedy obiekt Car przestaje istnieć. Huh..... Powiem tylko jeszcze, że przydałaby się weryfikacja tego co napisałem - niech jakiś OOP spec się wypowie, bo nie jestem do końca pewien czy nie napisałem bzdur ![]() -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 21.08.2003 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Cytat 3) czy można robić kilka kontrolerów
Chodzi Ci o kilka kontrolerów podczas pojedynczego odpalenia skryptu/akcji etc? ..czy może kilka w sensie rozbiciu aplikacji na kilka mniejszych? (np:index.php, subscription.php, forum.php itd?) ..jeżeli tak, to w jednym z frameworków podanych przez Hawka na końcu jego artykułu *chyba w Mojavi.. ale nie jestem pewien) właśnie jest coś takiego zrealizowane (rozbicie jakby na kilka mniejszych aplikacji.. po prostu różne *.php korzystają z różnych plików konfiguracyjnych) Cytat 4) co to są akcje - bo często piszecie "akcje/widoki" - co to jest widok to wiem...
już odsyłałem do: http://www.php.pl/index.php/phppl/t_umacze...d/a_cuchy_akcji ..tylko wtedy chwilowo tłumaczenie nie było dostępne ;>) -------------------- www.calek.info
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Cytat 1) mam modele zbudowane tak, że np. użytkownik (jego klasa - User) składa się z podklas takich jak (UserId, UserName itd...) - a każda z tych podklas dziedziczy po klasie DataField - która odpowiada za wyciąganie i przetwarzanie kolenych pól w tabelach bazy danych.
A jaki jest tego sens? Nawet w javie są typy prymitywne, i nie ma sensu, jak coś ma atrybut typu całkowitoliczbowego, nie dawać tam po prostu int. Java akurat ma Integer, ale jego zastosowanie jest akurat inne... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:13 |