Ich habe eine einfache MVC-Java-Anwendung erstellt, die einer Datenbank Datensätze über Datenformulare hinzufügt.
Meine App sammelt Daten, validiert sie und speichert sie. Dies liegt daran, dass die Daten online von verschiedenen Benutzern bezogen werden. Die Daten sind größtenteils numerischer Natur.
Nachdem die numerischen Daten in der Datenbank (SQL Server) gespeichert wurden, möchte ich, dass meine App Berechnungen durchführt und die Ergebnisse anzeigt. Der Benutzer ist nicht daran interessiert, wie Berechnungen durchgeführt werden, so dass sie gekapselt werden müssen. Der Benutzer muss nur die einfach berechneten Daten anzeigen können (z. B. A-Spaltendaten minus B-Spaltendaten geteilt durch C-Spaltendaten). Ich kann gespeicherte Prozeduren für dasselbe schreiben, aber ich möchte eine dreistufige App.
Ich möchte, dass die Daten, die ich als Datensatz in die Datenbank gestellt habe, durch Berechnungen bearbeitet werden. Die ursprünglichen Daten sollten nicht betroffen sein, während die neuen Daten, Nachberechnungen, als neuer Entitätsdatensatz in der Datenbank gespeichert werden müssen.
Wo soll ich den Code für diese Hintergrundberechnung schreiben? Sollte ich die Regeln und die Geschäftslogik in neue JavaBeans-Dateien einfügen?
quelle
Antworten:
Die Geschäftslogik sollte im Modell platziert werden , und wir sollten auf fette Modelle und dünne Controller abzielen .
Als Ausgangspunkt sollten wir von der Steuerungslogik ausgehen. Zum Beispiel: auf Update sollten Sie Ihre Controller Ihren Code an die direkte Methode / Service , der liefert Ihre Änderungen an dem Modell.
Im Modell können leicht Helfer- / Serviceklassen erstellt werden, in denen die Geschäftsregeln oder Berechnungen der Anwendung validiert werden können.
Eine konzeptionelle Zusammenfassung
Die Steuerung ist für die Anwendungslogik. Die Logik, die spezifisch dafür ist, wie Ihre Anwendung mit der zugehörigen "Wissensdomäne" interagieren soll.
Das Modell ist für eine von der Anwendung unabhängige Logik . Diese Logik sollte in allen möglichen Anwendungen des "Wissensbereichs" gültig sein, zu dem sie gehört.
Daher ist es logisch, alle Geschäftsregeln im Modell zu platzieren.
quelle
The most common mistakes are to implement application logic operations inside the controller or the view(presentation) layer.
Wie immer kommt es auf die Komplexität des Projekts an.
In trivialen Anwendungen, in denen die Komplexität des Domänenmodells relativ gering ist, können Sie die Logik in die Modelle einfügen und sie als "ein Tag" bezeichnen.
Für nicht triviale Anwendungen mit komplexen Modellen und vielen Geschäftsregeln ist es jedoch besser, die Dinge ein bisschen mehr zu trennen.
Wenn Sie die Geschäftslogik, an der mehr als ein Modell beteiligt ist, in ein Modell aufnehmen, führen Sie eine enge Kopplung zwischen diesen Modellen ein. Da die Anwendungen immer größer werden, entwickeln sich diese Modelle zu einem Modell
god models
, das zu viel weiß. Und dies wird schnell zu einem großen Durcheinander, das schwer zu testen und zu warten ist. In diesem Fall ist es vorteilhaft, die Logik in einer separaten Ebene abzulegen.Berücksichtigen Sie bei der Entscheidung für eine Abstraktion immer die Komplexität und den Zweck Ihrer App und vermeiden Sie Überentwicklungen. Bei einfachen / kleinen Anwendungen erhöht die Einführung von mehr Schichten als erforderlich die Komplexität, anstatt sie zu reduzieren.
Robert Martin (Onkel Bob) hat einen guten Blogbeitrag zu diesem Thema: The Clean Architecture.
quelle
The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate
. Das ist eine Adapterdefinition.Das Einfügen der Geschäftslogik in das Modell scheint der beste Weg zu sein. Der Controller erhält einen Anruf von der Remote-Web-App. Der Controller im MVC-Webdienst nimmt den Aufruf entgegen und leitet die Ausführung an eine Methode in BL weiter. Jetzt kann Business Logic im 'Model' enthalten sein, aber auch in einem anderen Ordner, beispielsweise 'Business Logic' . Es gibt also keine feste Regel, wo sich die Geschäftslogik befinden soll.
Ich habe einen Webdienst verwendet, der auf MVC 3.0 basiert, und der Container der Geschäftslogik ist das MVC- MODELL .
quelle