Aby zacząć pracę w frameworku CakePHP, musisz zrozumieć na jakim wzorcu projektowym jest on oparty. Pozwoli Ci to m. in. z łatwością napisać aplikację, a także w późniejszym czasie będziesz bez problemu poruszał się po jej kodzie źródłowym. A więc musimy zastanowić się z jakiego wzorca projektowego korzysta CakePHP.


WZORZEC MVC


MVC – to skrót od ang. Model-View-Controller. (Model-Widok-Kontroler). Jest to jeden z najbardziej popularnych wzorców projektowych wykorzystywanych przy tworzeniu nowoczesnych systemów informatycznych o czym można się przekonać patrząc na rozmaite frameworki, nie tylko te przeznaczone na platformę PHP.

Główną koncepcją MVC jest podział aplikacji na 3 niezależne warstwy:

1. Model, czyli warstwę reprezentującą logikę biznesową

2. Widok, czyli warstwę reprezentującą wyniki logiki biznesowej

3. Kontroler, czyli warstwę zarządzającą całą aplikacją.

Każdą z warstw na przykładzie CakePHP dokładnie opiszę w moich kolejnych wpisach, a teraz skupmy się na przepływie żądań w tym wzorcu. W tym celu posłużę się rysunkiem:

Wyobraźmy sobie taką sytuację:

MVC

MVC

Mamy jakiegoś użytkownika internetu, który przegląda listę aktualności na Twojej stronie utworzonej w frameworku opartym na wzorcu MVC. Jedna informacja bardzo go zaciekawiła, więc chcąc się dowiedzieć więcej klika na tytuł aktualności. A więc realizacja tej akcji będzie wyglądała następująco:

1. Żądanie wyświetlenia wybranej aktualności przesyłane jest z widoku do kontrolera, którego celem jest wybranie odpowiedniego modelu i widoku.

2. Kontroler po rozpoznaniu żądania wybiera model reprezentujący aktualność.

3. Kontroler wybiera widok do prezentacji aktualności i przekazuje mu informacje o modelu, z którego ma skorzystać.

4. Widok wysyła zapytanie do modelu w celu pobrania treści aktualności.

5. Model, w którym wykonuje się logika biznesowa, posiada wszystkie potrzebne dane od widoku, więc spełnia jego żądanie. Znajduje odpowiedni wpis w bazie i przesyła jego treść.


WZORZEC MVP


MVP, czyli z ang. Model-View-Presenter (Model-Widok-Prezenter) jest pochodną wzorca MVC. Modyfikacja polega na tym, że kontroler z MVC staje się teraz prezenterem. A to oznacza, że wszelkie wyniki logiki biznesowej aplikacji przesyłane są właśnie z tego prezentera, a nie jak w klasycznym wzorcu MVC – z modelu.

Dokładnie przedstawia to rysunek:

MVP

MVP

No i ta sama sytuacja (z użytkownikiem przeglądającym aktualności), ale teraz na stronie opartej na wzorcu MVP:

1. Żądanie wyświetlenia wybranej aktualności przesyłane jest z widoku do kontrolera (prezentera).

2. Kontroler po rozpoznaniu żądania wybiera model reprezentujący aktualność. Nie wysyła do niego jednak żadnej instrukcji co ma zostać dalej wykonane, a jedynie prośbę o dane konkretnej aktualności.

3. Model odsyła potrzebne dane z powrotem do kontrolera.

4. Kontroler może jeszcze przetworzyć uzyskane dane, wybrać odpowiednią treść aby następnie wysłać ją do widoku.


PORÓWNANIE


A więc czym wyróżnia się wzorzec MVP od klasycznego MVC?

Główna różnica polega na tym, że logika biznesowa została przeniesiona z modelu do kontrolera. Z związku z tym:

1. Rola modelu ograniczyła się głównie do wykonywania podstawowych operacji na danych, takich jak wyszukiwanie i modyfikacja.

2. Komunikacja między widokiem a modelem odbywa się za pośrednictwem kontrolera. To on pobiera surowe dane z modelu, przetwarza je i wysyła do widoku.


PODSUMOWANIE


Na oficjalnej stronie CakePHP jest napisane, że framework ten oparty jest na wzorcu MVC. Jak się później przekonasz, dowolny przykład kodu będzie pokazywał, że to jednak MVP. Z uwagi na to, że już się tak przyjęło i nazwy warstw w CakePHP jak i w MVC są identyczne, we wszystkich moich wpisach będę więc używał terminu MVC.

Świadomość, że jednak jest inaczej może w przyszłości oszczędzić wiele nieporozumień m. in. znawcom wzorca MVC, którzy rozpoczynają swoją przygodę z tym frameworkiem i mogli by się do niego niepotrzebnie zniechęcić. Również tym, którzy nie znali do tej pory tego wzorca i mogli by go później źle interpretować opierając swoją wiedzę o nim na Cake’u. Dlatego proszę byśmy o tym pamiętali.