2009-11-18 20 views
5

Właśnie rozpocząłem badania mvc, i nie jestem pewien, czy jeszcze to uchwycę. Z tego, co zbieram, wynika, że ​​jest to wdrożenie rozwiązania 3-go rzędu, tj. Model odpowiada DAL, kontrolerowi do warstwy logiki biznesowej i View jako warstwa prezentacji.MVC - czy to tylko model 3-rzędowy?

Jestem daleko poza bazą?

Odpowiedz

8

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.

+1

Zgadzam się. Chude kontrolery i grube modele ułatwiają mi życie. –

3

Sortuj. Wygląda to tak:

alt text

Wzór najczęściej stosowany jest dziś:

Database -> DAL -> BLL -> Controller -> View Model -> UI 

Gdzie

DAL == Data Access Layer (aka ORM, Object-Relational mapper) 
BLL == Business Logic Layer 

pamiętać, że nie zawsze trzeba zrobić każdą warstwę. Na przykład model BLL i widok modelu mogą być opcjonalne, jeśli aplikacja jest wystarczająco mała.

Powinieneś zapoznać się z NerdDinner tutorial.. Opisuje wszystkie te pojęcia w jednym odnośniku.

0

Krótka uwaga, masz rację, kiedy mówią, że kontroler może (nie musi) być warstwa biznesu, a widok jest warstwą prezentacji.

Jednak model to obiekty (w zależności od implementacji), które zawierają dane, podczas gdy warstwa danych jest warstwą, która pobiera/manipuluje danymi.