Wie man Modelle dazu bringt, mehr zu tun als Daten festzulegen und abzurufen und zu validieren

8

Ich stelle diese Frage, weil ich nach der Entwicklung einiger kleiner benutzerdefinierter CMS-Lösungen in einem Framework die Idee entwickelt habe, dass Modelle leicht durch ORMs ersetzt werden können, die das Validieren, Abrufen und Festlegen von Daten erleichtern, da dies alles ist, wofür sie benötigt werden .
Ich habe kürzlich eine Bestellung für eine komplexe benutzerdefinierte Client-Management-Lösung erhalten. Nachdem ich ein wenig nachgeforscht hatte, wie ich vorgehen sollte, fand ich
Folgendes : http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/

Now Die Idee ist nicht neu, da ich das über den MVC-Ansatz gelesen habe. Modelle handhaben die Geschäftslogik. Es fällt mir jedoch schwer, einen Ansatz zu planen, bei dem Models mit der Geschäftslogik umgehen und Klassen sind, die aufgrund der Art der Arbeit, an die ich mich gewöhnt habe, in sich abgeschlossen sind.
Bitte helfen Sie mir hier, indem Sie die Idee erklären und mich auf einige Beispiele, Artikel usw. Verweisen

kapv89
quelle
Gute Frage. Ich habe noch nie darüber nachgedacht.
Saeed Neamati
Netter Link ... welche Entwicklertechnologie verwenden Sie ... ASP.Net?
IAbstract
Als Zusammenfassung benutze ich die schwarzen Schafe der Entwicklungstechnologien, PHP. Seit 5.3 ist es jedoch ziemlich gut geworden. Früher im Codeigniter gearbeitet, jetzt im Fuelphp (im Grunde ein Codeigniter für PHP5.3)
Kapv89

Antworten:

5

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.

Falke
quelle
Das ist eine sehr informative Antwort. Vielen Dank. Soweit ich weiß, muss ich möglicherweise die orm-Klassen erweitern, um die Funktionen hinzuzufügen, die ich möglicherweise benötige, oder vielmehr eine zweite Modellschicht über der ORM-Schicht definieren, die die Geschäftslogik auf die Objekte anwendet, an denen sie arbeitet. Verstehe ich es richtig? (Außerdem bestelle ich das Buch sofort)
kapv89
Kann nicht mehr bearbeitet werden, aber mit der Erweiterung der ORM-Calsses meine ich die Erweiterung der Modelle, die die Datenbank darstellen
kapv89
@ kapv89: Manchmal ist es besser, die Klassen zu verpacken / zu erweitern, hauptsächlich für Übertragungen. Weitere Informationen finden Sie im DTO-Muster (Datenübertragungsobjekt).
Falcon
Ich habe darüber nachgedacht, was Sie in Ihrem Beitrag gesagt haben, und über fette Modelle und domänengetriebenes Design gelesen. Ich glaube, ich habe jetzt eine Idee, wie ich dieses Projekt durchführen soll. Vielen Dank. Ich habe auch dieses Buch bestellt und werde es lesen, während ich an diesem Projekt
arbeite