Ich schaute auf die differences between POCO and DTO (Es scheint, dass POCO sind dto's mit Verhalten (Methoden?)) Und stolperte this article von Martin Fowler auf dem anämischen Domain-Modell.POCOs, DTOs, DLLs und anämische Domain-Modelle
Durch mangelndes Verständnis habe ich glaube ich eines dieser anämischen Domain-Modelle erstellt.
In einer meiner Anwendungen habe ich meine Business-Domain-Entitäten in einer 'dto' DLL definiert. Sie haben viele Eigenschaften mit Getter und Setter und nicht viel mehr. Mein Geschäftslogik-Code (ausfüllen, berechnen) befindet sich in einer anderen DLL-Datei, und mein Datenzugriffscode befindet sich in einer DAL-DLL. "Best Practice", dachte ich.
So Regel erstelle ich ein dto wie so:
dto.BusinessObject bo = new dto.BusinessObject(...)
und an die BLL Schicht passieren etwa so:
bll.BusinessObject.Populate(bo);
die wiederum eine gewisse Logik führt und leitet sie an den dal Schicht etwa so:
dal.BusinessObject.Populate(bo);
Von meinem Verständnis meiner DTO in POCO mache ich das Geschäft logi machen müssen c und Verhalten (Methoden) Teil des Objekts. Also anstelle des obigen Codes ist es eher wie folgt:
poco.BusinessObject bo = new poco.BusinessObject(...)
bo.Populate();
dh. Ich rufe die Methode für das Objekt auf, anstatt das Objekt an die Methode zu übergeben.
Meine Frage ist - wie kann ich das tun und immer noch die 'Best Practice' Schichtung von Bedenken (separate DLL's etc ...). Ruft die Methode für das Objekt nicht auf, bedeutet das, dass die Methode im Objekt definiert werden muss?
Bitte helfen Sie meine Verwirrung.
Kennen Sie Quellcodebeispiele für ein solches Design? Ich finde die Prinzipien sinnvoll, aber wenn ich zur Implementierung von FlyToAirport komme, habe ich eine gesprächige Schnittstelle zur Datenbank, wenn ich mehrere Tabellen aktualisieren muss, besonders wenn ich keine SPs verwende. –
Wenn externe Transaktionen beteiligt sind, ist die Verwendung von Diensten sinnvoller. Sie sollten versuchen, diese so grobkörnig wie möglich zu gestalten, damit Sie so viel Verhalten in Ihr Domänenmodell einbetten können. Leider sehe ich es nicht so oft wie möglich verwendet. Natürlich verwende ich es in jedem nicht-alten Produktionscode, den ich schreibe, und habe an einigen Projekten gearbeitet, die diesen Ansatz verwenden. –