Najlepsze praktyki w MVC

Chociaż MVC (model-widok-kontroler) jest wzorcem znanym prawie przez każdego programistę, sposób jego zastosowania w rzeczywistej aplikacji wciąż umyka wielu ludziom. Główną ideą MVC jest "możliwość ponownego użycia kodu oraz oddzielenie warstw" (ang. code reusability and separation of concerns). W tej części poradnika opiszemy kilka ogólnych wskazówek dotyczących tego jak lepiej podążać ideą MVC podczas procesu tworzenia aplikacji.

Aby lepiej wytłumaczyć te wskazówki, załóżmy, że aplikacja zawiera kilka podaplikacji, takich jak:

Podaplikacje mogą być zaimplementowane jako moduły, lub też jako aplikacje Yii, które współdzielą pewien kod z innymi podaplikacjami.

Model

Modele stanowią podstawową strukturę danych aplikacji sieciowej. Modele często są współdzielone pomiędzy różnymi podaplikacjami aplikacji sieciowej. Na przykład, model logowania do systemu LoginForm moze być używany zarówno w front endzie jak i back endzie aplikacji; zaś model News możeby być używany w konsoli poleceń oraz w front/back endzie aplikacji. Dlatego też, modele

Czasami stosowanie poprzednio przedstawionej zasady może spowodować, że nasz model będzie zbyt obszerny, gdyż będzie zawierał zbyt wiele kodu w jednej klasie. Może to spowodować, że modelem cieżko będzie zarządzać jeśli zawiera on kod służący różnym celom. Na przykład, model News może zawierać metodę o nazwie getDeletedNews, która jest używana jedynie przez back end. Dla większych aplikacji, następująca strategia może zostać użyta w celu zwiększenia łatwości zarządzania modelami:

Zatem jeśli mielibyśmy zastosować tą strategię w naszym przykładzie, dodalibyśmy model News zawierający jedynie metodę getLatestNews do aplikacji frontendowej oraz dodalibyśmy następny model News, zawierający jedynie metodę getDeletedNews, do aplikacji backendowej.

Ogólnie rzecz biorąc, modele nie powinny zawierać logiki, która bezpośrednio ma do czynienia z użytkownikiem końcowym. Precyzując, model:

Widok

Widoki są odpowiedzialne za reprezentowanie modeli w formacie pożądanym przez użytkowników końcowych. Ogólnie rzecz biorąc widoki:

Widoki mogą być wielokrotnie używane na różnorakie sposoby:

Kontroler

Kontrolery są klejem łączącym modele, widoki oraz inne komponenty w działającą aplikację. Kontrolery odpowiedzialne są za bezpośrednie zajmowanie się żądaniami użytkownika końcowego. Dlatego też kontrolery:

W dobrze zaprojektowanej aplikacji MVC, kontrolery są często bardzo małe, zawierają prawdopodobnie jedynie kilkadziesiąt linijek kodu zaś modele są bardzo duże, gdyż zawierają dużo kodu odpowiedzialnego za reprezentację i manipulację danymi. Dzieje się tak ponieważ struktura i logika biznesowa reprezentowana przez modele jest bardzo typowa dla konkretnej aplikacji i musi być bardzo dostosowana aby sprostać wymaganiom stawianym przez aplikację; ponieważ logika kontrolera często naśladuje podobne wzorce pomiędzy aplikacjami może zostać uproszczona poprzez używanie frameworku czy też klas bazowych.

$Id: basics.best-practices.txt 2795 2010-12-31 00:22:33Z alexander.makarow $