Faust von allem:
Ich glaube, dass Sie das MVC-Muster und die n-Tier-basierten Designprinzipien verwechseln.
Die Verwendung eines MVC-Ansatzes bedeutet nicht, dass Sie Ihre Anwendung nicht überlagern sollten.
Es kann hilfreich sein, wenn Sie MVC eher als Erweiterung der Präsentationsebene sehen.
Wenn Sie Nicht-Präsentationscode in das MVC-Muster einfügen, kann dies sehr bald zu einem komplizierten Design führen.
Daher würde ich vorschlagen, dass Sie Ihre Geschäftslogik in eine separate Geschäftsschicht einteilen.
Schauen Sie sich das an: Wikipedia-Artikel über mehrschichtige Architektur
Es heißt:
Heute sind MVC und ähnliche Model-View-Presenter (MVP) Designmuster für die Trennung von Bedenken, die ausschließlich für die Präsentationsschicht eines größeren Systems gelten.
Wie auch immer ... wenn es sich um eine Unternehmenswebanwendung handelt, sollten die Aufrufe von der Benutzeroberfläche an die Geschäftslogikschicht innerhalb des (Präsentations-) Controllers platziert werden.
Dies liegt daran, dass der Controller die Aufrufe einer bestimmten Ressource tatsächlich verarbeitet, die Daten durch Aufrufe der Geschäftslogik abfragt und die Daten (das Modell) mit der entsprechenden Ansicht verknüpft.
Mud hat Ihnen gesagt, dass die Geschäftsregeln in das Modell einfließen.
Das ist auch wahr, aber er hat das (Präsentations-) Modell (das 'M' in MVC) und das Datenschichtmodell eines tierbasierten Anwendungsdesigns verwechselt.
So gilt es Ihre Datenbank bezogenen Geschäft zu platzieren Regeln im Modell (Datenschicht) der Anwendung.
Sie sollten sie jedoch nicht in das Modell Ihrer MVC-strukturierten Präsentationsebene einfügen, da dies nur für eine bestimmte Benutzeroberfläche gilt.
Diese Technik ist unabhängig davon, ob Sie ein domänengesteuertes Design oder einen auf Transaktionsskripten basierenden Ansatz verwenden.
Lassen Sie mich das für Sie visualisieren:
Präsentationsschicht: Modell - Ansicht - Controller
Geschäftsschicht: Domänenlogik - Anwendungslogik
Datenschicht: Datenrepositorys - Datenzugriffsschicht
Das oben gezeigte Modell bedeutet, dass Sie über eine Anwendung verfügen, die MVC, DDD und eine datenbankunabhängige Datenschicht verwendet.
Dies ist ein gängiger Ansatz zum Entwerfen einer größeren Unternehmenswebanwendung.
Sie können es aber auch verkleinern, um eine einfache Nicht-DDD-Geschäftsschicht (eine Geschäftsschicht ohne Domänenlogik) und eine einfache Datenschicht zu verwenden, die direkt in eine bestimmte Datenbank schreibt.
Sie können sogar die gesamte Datenschicht löschen und direkt von der Geschäftsschicht aus auf die Datenbank zugreifen, obwohl ich dies nicht empfehle.
Das ist der Trick ... Ich hoffe das hilft ...
[Hinweis:] Sie sollten sich auch der Tatsache bewusst sein, dass heutzutage mehr als nur ein "Modell" in einer Anwendung vorhanden ist. Im Allgemeinen hat jede Ebene einer Anwendung ein eigenes Modell. Das Modell der Präsentationsebene ist ansichtsspezifisch, jedoch häufig unabhängig von den verwendeten Steuerelementen. Die Geschäftsschicht kann auch ein Modell haben, das als "Domänenmodell" bezeichnet wird. Dies ist normalerweise der Fall, wenn Sie sich für einen domänengesteuerten Ansatz entscheiden. Dieses "Domänenmodell" enthält sowohl Daten als auch Geschäftslogik (die Hauptlogik Ihres Programms) und ist normalerweise unabhängig von der Präsentationsschicht. Die Präsentationsschicht ruft normalerweise die Geschäftsschicht bei einem bestimmten "Ereignis" (Taste gedrückt usw.) auf, um Daten von der Datenschicht zu lesen oder in diese zu schreiben. Die Datenschicht verfügt möglicherweise auch über ein eigenes Modell, das normalerweise datenbankbezogen ist.
Die Frage ist: Wie passt das in das MVC-Konzept?
Antwort -> nicht!
Nun - das tut es irgendwie, aber nicht vollständig.
Dies liegt daran, dass MVC ein Ansatz ist, der Ende der 1970er Jahre für die Programmiersprache Smalltalk-80 entwickelt wurde. Zu dieser Zeit waren GUIs und PCs ziemlich ungewöhnlich und das World Wide Web wurde nicht einmal erfunden! Die meisten heutigen Programmiersprachen und IDEs wurden in den 1990er Jahren entwickelt. Zu dieser Zeit waren Computer und Benutzeroberflächen völlig anders als in den 1970er Jahren.
Sie sollten dies berücksichtigen, wenn Sie über MVC sprechen.
Martin Fowler hat einen sehr guten Artikel über MVC, MVP und die heutigen GUIs geschrieben.