it-swarm.com.de

Wo kann man Geschäftslogik in MVC-Design einfügen?

Ich habe eine einfache MVC Java -Anwendung erstellt, die Datensätze über Datenformulare zu einer Datenbank 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 meist numerischer Natur.

Für die numerischen Daten, die in der Datenbank (SQL Server) gespeichert werden, möchte ich, dass meine App Berechnungen durchführt und die Ergebnisse anzeigt. Der Benutzer ist nicht daran interessiert, wie Berechnungen durchgeführt werden, daher müssen sie gekapselt werden. Der Benutzer muss nur die einfachen berechneten Daten anzeigen können (z. B. A-Spaltendaten minus B-Spaltendaten geteilt durch C-Spaltendaten). Ich weiß, wie man gespeicherte Prozeduren für dieselbe schreibt, möchte aber eine dreistufige App.

Ich möchte, dass die Daten, die ich als Datensatz in die Datenbank eingefügt habe, durch Berechnungen bearbeitet werden. Die ursprünglichen Daten sollten nicht betroffen sein, während die neuen Daten nach der Berechnung 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?

46

Das Geschäftslogik sollte in das Modell eingefügt werden, und wir sollten nach fetten Modellen streben und dünne Controller .

Als Ausgangspunkt sollten wir von der Steuerungslogik ausgehen. Zum Beispiel: beim Update, Ihr Controller sollte Ihren Code an die Methode/den Dienst weiterleiten, die liefert = Ihre Änderungen am Modell.

Im Modell können wir leicht Hilfs-/Dienstklassen erstellen, in denen die Anwendung Geschäftsregeln oder Berechnungen validiert werden kann.

Eine konzeptionelle Zusammenfassung

  • Die Steuerung dient zur Anwendungslogik. Die Logik, die spezifisch dafür ist, wie Ihre Anwendung mit der "Domäne des Wissens" interagieren möchte, zu der sie gehört.

  • Das Modell ist für eine von der Anwendung unabhängige Logik. Diese Logik sollte in allen möglichen Anwendungen der "Wissensdomäne" gültig sein, zu der sie gehört.

  • Daher ist es logisch, alle Geschäftsregeln in das Modell aufzunehmen.

87
Yusubov

Wie immer kommt es auf die Komplexität des Projekts an.

In einfachen 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 Tag bezeichnen.

Für nicht triviale Anwendungen mit komplexen Modellen und vielen Geschäftsregeln ist es jedoch besser, die Dinge ein wenig mehr zu trennen.

Wenn Sie die Geschäftslogik, die mehr als ein Modell umfasst, in ein Modell einfügen, führen Sie eine enge Kopplung zwischen diesen Modellen ein. Da die Anwendungen weiter wachsen, werden diese Modelle tendenziell zu god models, zu viel zu wissen. Und dies wird schnell zu einem großen Durcheinander, das schwer zu testen und zu warten ist. In diesem Fall ist es also vorteilhaft, die Logik in eine separate Ebene zu legen.

Berücksichtigen Sie bei der Entscheidung für die Abstraktion immer die Komplexität und den Zweck Ihrer App und vermeiden Sie Überentwicklung. Bei trivialen/kleinen Anwendungen erhöht das Einführen von mehr Schichten als erforderlich die Komplexität, anstatt sie zu reduzieren.

Robert Martin (Onkel Bob) hat einen guten Blog-Beitrag zu diesem Thema: The Clean Architecture.

22
Hakan Deryal

Das Einfügen der Geschäftslogik in das Modell ist möglicherweise der beste Weg. 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 'Modell' enthalten sein, kann aber auch in einem anderen Ordner positioniert werden, z. B. 'Business Logic'. Es gibt also keine feste Regel, wo die Geschäftslogik sein wird.

Ich habe einen auf MVC 3.0 basierenden Webdienst verwendet und der Container der Geschäftslogik ist das MVC -MODELL .

5
MontyPython