Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Model 2] : kolejne zapytanka ;)
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
KaGe
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?
lukaswoj
Jestem w stanie tylko pomóc w zakresie punktu nr 5.

Polecam przeczytanie tego artykułu: Object Oriented php - jeśli tylko znasz angielski smile.gif

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 smile.gif - a o to w globalnym kontekście właśnie chodzi smile.gif

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 smile.gif
marcin96
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 ;>)
hawk
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...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.