Pięść wszystkich:
wierzę, że łączysz wzór MVC i zasady projektowania oparte na n-poziomach.
Zastosowanie podejścia MVC nie oznacza, że nie powinieneś nakładać warstwy na aplikację.
Może to pomóc, jeśli zobaczysz MVC bardziej jak rozszerzenie warstwy prezentacji.
Jeśli umieścisz kod nie-prezentacji we wzorcu MVC, może bardzo szybko skończyć się skomplikowanym projektem.
Dlatego proponuję umieścić logikę biznesową w osobnej warstwie biznesowej.
Wystarczy spojrzeć na to: Artykuł w Wikipedii na temat architektury wielowarstwowej
Mówi:
Obecnie MVC i podobny model-view-prezenter (MVP) są wzorcami projektowymi separacji problemów, które dotyczą wyłącznie warstwy prezentacji większego systemu.
W każdym razie ... gdy mówimy o aplikacji internetowej dla przedsiębiorstw, połączenia z interfejsu użytkownika do warstwy logiki biznesowej powinny być umieszczone wewnątrz kontrolera (prezentacji).
Jest tak, ponieważ kontroler faktycznie obsługuje połączenia z określonym zasobem, wysyła zapytania do danych, wykonując połączenia z logiką biznesową i łączy dane (model) z odpowiednim widokiem.
Błoto powiedziało ci, że zasady biznesowe są zgodne z modelem.
To także prawda, ale pomieszał model (prezentacji) („M” w MVC) i model warstwy danych w projektowaniu opartym na warstwach.
Dlatego prawidłowe jest umieszczenie reguł biznesowych związanych z bazą danych w modelu (warstwa danych) aplikacji.
Nie należy jednak umieszczać ich w modelu warstwy prezentacji o strukturze MVC, ponieważ dotyczy to tylko określonego interfejsu użytkownika.
Ta technika jest niezależna od tego, czy używasz projektu opartego na domenie, czy podejścia opartego na skrypcie transakcji.
Pozwól mi to sobie wyobrazić:
Warstwa prezentacji: Model - Widok - Kontroler
Warstwa biznesowa: logika domeny - logika aplikacji
Warstwa danych: repozytoria danych - warstwa dostępu do danych
Powyższy model oznacza, że masz aplikację korzystającą z MVC, DDD i niezależną od bazy danych warstwę danych.
Jest to powszechne podejście do projektowania większych aplikacji internetowych dla przedsiębiorstw.
Ale można go również zmniejszyć, aby użyć prostej warstwy biznesowej innej niż DDD (warstwa biznesowa bez logiki domeny) i prostej warstwy danych, która zapisuje bezpośrednio do określonej bazy danych.
Możesz nawet upuścić całą warstwę danych i uzyskać dostęp do bazy danych bezpośrednio z warstwy biznesowej, chociaż nie polecam tego.
To jest sztuczka ... Mam nadzieję, że to pomaga ...
[Uwaga:] Należy również pamiętać, że obecnie w aplikacji jest więcej niż jeden „model”. Zwykle każda warstwa aplikacji ma własny model. Model warstwy prezentacji jest specyficzny dla widoku, ale często niezależny od zastosowanych kontrolek. Warstwa biznesowa może również mieć model zwany „modelem domeny”. Zazwyczaj dzieje się tak, gdy decydujesz się na podejście oparte na domenie. Ten „model domeny” zawiera zarówno dane, jak i logikę biznesową (główną logikę programu) i zwykle jest niezależny od warstwy prezentacji. Warstwa prezentacji zwykle wywołuje warstwę biznesową w określonym „zdarzeniu” (naciśnięcie przycisku itp.) W celu odczytania danych lub zapisania danych w warstwie danych. Warstwa danych może również mieć własny model, który zazwyczaj jest związany z bazą danych.
Pytanie brzmi: jak to pasuje do koncepcji MVC?
Odpowiedź -> Nie!
Cóż - to trochę tak, ale nie do końca.
Wynika to z faktu, że MVC to podejście opracowane pod koniec lat siedemdziesiątych dla języka programowania Smalltalk-80. W tym czasie GUI i komputery osobiste były dość rzadkie, a sieć nawet nie została wynaleziona! Większość współczesnych języków programowania i IDE opracowano w latach 90. W tym czasie komputery i interfejsy użytkownika były zupełnie inne niż w latach siedemdziesiątych.
Należy o tym pamiętać, rozmawiając o MVC.
Martin Fowler napisał bardzo dobry artykuł o MVC, MVP i dzisiejszych GUI.