Derik Whitaker hat vor ein paar Tagen einen Artikel veröffentlicht , der einen Punkt erreicht hat, auf den ich schon seit einiger Zeit neugierig bin: Sollte Geschäftslogik in Controllern existieren?
Bisher haben alle ASP.NET MVC-Demos, die ich gesehen habe, den Repository-Zugriff und die Geschäftslogik in den Controller integriert. Einige werfen dort sogar eine Validierung hinein. Dies führt zu ziemlich großen, aufgeblähten Controllern. Ist dies wirklich der Weg, um das MVC-Framework zu verwenden? Es scheint, dass dies nur zu einer Menge duplizierten Codes und Logik führen wird, die auf verschiedene Controller verteilt sind.
asp.net-mvc
design-patterns
controller
business-logic
Kevin Pang
quelle
quelle
Antworten:
Geschäftslogik sollte wirklich im Modell sein. Sie sollten auf fette Modelle und dünne Controller abzielen.
Zum Beispiel anstatt:
Ich hätte lieber:
Dies setzt voraus, dass die Steuer von einem externen Dienst berechnet wird, und erfordert, dass Ihr Modell die Schnittstellen zu Ihren externen Diensten kennt.
Dies würde Ihren Controller ungefähr so aussehen lassen:
Oder etwas ähnliches.
quelle
Ich mag das Diagramm von Microsoft Patterns & Practices . Und ich glaube an das Sprichwort "Ein Bild sagt mehr als tausend Worte".
quelle
Das ist eine faszinierende Frage.
Ich finde es interessant, dass eine große Anzahl von MVC-Beispielanwendungen tatsächlich nicht dem MVC-Paradigma folgt, indem die "Geschäftslogik" wirklich vollständig in das Modell aufgenommen wird. Martin Fowler hat darauf hingewiesen, dass MVC kein Muster im Sinne der Gang Of Four ist. Es ist vielmehr ein Paradigma, dass der Programmierer Muster hinzufügen muss , wenn er etwas jenseits einer Spielzeug-App erstellt.
Die kurze Antwort lautet also, dass "Geschäftslogik" in der Tat nicht in der Steuerung leben sollte, da die Steuerung die zusätzliche Funktion hat, sich mit der Ansicht und den Benutzerinteraktionen zu befassen, und wir Objekte mit nur einem Zweck erstellen möchten.
Eine längere Antwort ist, dass Sie sich Gedanken über das Design Ihrer Modellebene machen müssen, bevor Sie die Logik von Controller zu Modell verschieben. Vielleicht können Sie die gesamte App-Logik mit REST verarbeiten. In diesem Fall sollte das Design des Modells ziemlich klar sein. Wenn nicht, sollten Sie wissen, welchen Ansatz Sie verwenden werden, um zu verhindern, dass Ihr Modell aufgebläht wird.
quelle
Sie können dieses fantastische Tutorial von Stephen Walther lesen , das die Validierung mit einer Service-Schicht zeigt .
quelle
Business Logic sollte nicht in Controllern enthalten sein. Die Controller sollten so dünn wie möglich sein. Befolgen Sie im Idealfall das Muster:
Zusätzlich können Controller eine Anwendungslogik enthalten.
Wo lege ich meine Geschäftslogik ab? Im Modell.
Was ist ein Modell? Das ist eine gute Frage. Weitere Informationen finden Sie im Artikel zu Microsoft Patterns and Practices (ein großes Lob an AlejandroR für eine hervorragende Suche). Hier gibt es drei Kategorien von Modellen:
Natürlich ist MVC ein Paradigma, das es in verschiedenen Varianten gibt. Was ich hier beschreibe, ist, dass MVC nur die oberste Schicht belegt. Siehe diesen Artikel auf Wikipedia
quelle
Wenn Sie Abhängigkeitsinjektoren verwenden, wird Ihre Geschäftslogik zu ihnen gehen und Sie erhalten daher saubere und saubere Controller.
quelle