Ostrzegam przed traktowaniem Modelu jako warstwy dostępu do danych. To bardzo upraszczające i powoduje, że umieszczasz zbyt wiele kodu w warstwie sterownika. Lepiej jest umieścić więcej tego kodu w Modelu i uczynić trwałość bazy danych tylko częścią wewnętrznego kodu Modela. Lubię myśleć o MVC tak:
- Kontroler: uchwyt wkładu, należy określić, który model i który Zobacz instancji
- View: prezentacja danych aplikacji
- Model: wszystko inna logika dla aplikacji, w tym ale nie ograniczając się do DAL
Jest to w zasadzie wzór Page Controller.
Innym sposobem na przemyślenie tego jest: załóżmy, że musisz przenieść swoją aplikację internetową na inną platformę, na przykład aplikację z wiersza poleceń lub graficzną aplikację GUI. Które elementy logiki aplikacji powinny zostać ponownie użyte? Kontroler i widok zmieniłyby się wraz z przeniesieniem aplikacji na inną platformę, ponieważ implementacja wejścia i wyjścia musiałaby zostać zmieniona. Kod, który nie wymaga zmiany, powinien zostać zaimplementowany w modelu.
Jeśli dobrze rozdzielisz obawy, model, widok i kontroler będą minimalnie sprzężone i możesz zmienić implementację bez nadmiernego wpływu na innych. Jeśli zmienisz Model i zauważysz, że przepisujesz dużo kodu w Kontroli lub Widoku, prawdopodobnie nie podzieliłeś odpowiednio tych warstw. I wzajemnie.
Przeczytaj o produkcie Martin Fowler's Anemic Domain Model lub Domain Driven Design Quickly, aby uzyskać inne perspektywy.
Zobacz także mój numer blog from 2008, który napisałem w odpowiedzi na zgłoszenie przez ludzi wzoru zapisu aktywnego. Dostał kilka dobrych komentarzy i dyskusji.
Zgadzam się. Chude kontrolery i grube modele ułatwiają mi życie. –