Sie sollten mehr über Domain Driven Design lesen . Grundsätzlich versuchen Sie, die Anforderungen des Unternehmens in einem reinen Modell (in den meisten Objektmodellen) zu erfassen, das alle erforderlichen geschäftslogischen Aufgaben ausführen kann. Dieses Modell kann dann von einer Anwendungsschicht aus aufgerufen werden (z. B. der Ansicht oder dem Controller in MVC, in MVP rufen Sie es auf und passen es für die GUI in einem Presenter an). Das Modell sollte auch die Persistenz und andere technische Dinge so wenig wie möglich kennen.
Das Einkapseln der Geschäftslogik in ein solches Domänenmodell hat einige große Vorteile:
- Wiederverwendbarkeit
- Benutzerfreundlichkeit und Erweiterung
- Führt im Allgemeinen zu einer besseren Architektur
- Es kommuniziert klar Kohärenzen und die Geschäftsanforderungen ...
- ... und verbessert so die Kommunikation zwischen Entwicklern, Kunden, Analysten usw.
Ich empfehle Eric Evans Buch über Domain Driven Design zur weiteren Lektüre, da es Sie in die richtige Richtung weist und Ihnen einige gute Beispiele dafür gibt, wo welche Logik platziert werden soll. Ich wette, bis Sie es gelesen haben, wird ein großer Prozentsatz Ihrer Entitäten mehr als nur flache Daten enthalten .
Es fällt mir jedoch schwer, einen Ansatz zu planen, bei dem Modelle mit der Geschäftslogik umgehen und Klassen sind, die an sich vollständig sind.
Ich gehe davon aus, dass Sie sich in diesem Zusammenhang hauptsächlich auf Entitäten beziehen. Das Einfügen von Geschäftslogik / -verhalten in die Entitäten ist keine triviale Aufgabe. Sie sollten jedoch immer darüber nachdenken, was eine Entität ist und was eine Entität tut . Hat es einige Verantwortlichkeiten oder Verhaltensweisen? Manchmal ist es in Ordnung, flache Einheiten zu haben, wenn Verhaltensweisen oder Verantwortlichkeiten besser als Dienstleistungen ausgedrückt werden.
Angenommen, Sie haben ein Tier. Während seine Attribute flach in einer Datenbank gespeichert werden können, hat es auch ein gewisses Verhalten. Es muss essen. Aber ein Pflanzenfresser isst kein Fleisch, also müssen Sie sicherstellen, dass es sein Verhalten zeigt, wenn der Programmierer möchte, dass er Fleisch mit Gewalt konsumiert. Es kann sich bewegen und es kann sein eigenes einzigartiges Geräusch machen. Dies sind einige Dinge, die zum Beispiel in die Entität modelliert werden sollten. Sie würden sich sicher nicht auf Verfahrensdienste verlassen, um diese Tiere zum Fressen, Bewegen oder Lärm zu bringen.
Alle Beispiele sind jedoch flach ohne eine konkrete Geschäftsdomäne. Denken Sie also an Ihre Geschäftsdomäne und an ihre Entitäten, Verhaltensweisen und Verantwortlichkeiten. Eine andere Geschäftsdomäne kann Entitäten enthalten, die für einen Außenstehenden ähnlich aussehen, aber tatsächlich etwas völlig anderes sind oder ein völlig anderes Verhalten zeigen. Das Modell muss in erster Linie die Domäne seiner Benutzer so genau wie möglich darstellen.