2010-12-22 8 views
1

Um CRUD Betrieb in Domain-Driven Design durchführen, habe ich eine Domain Service pro Wurzel Aggregat erstellen müssen, die Methode speichern müssen, wird diese Methode Repository-Schnittstelle aufrufen, die in Infrastrukturebene konkrete Umsetzung haben. Ist das der richtige Ansatz? Bitte korrigieren Sie mich, wenn ich falsch liege.CRUD in Domain-Driven Design

+5

Meiner Meinung nach brauchen Sie diesen "Domain Service" nicht, da er nur die Verantwortung an das Repository und nichts anderes delegiert. Warum nicht das Repository direkt aufrufen? – goenning

Antwort

1

ich meistens einig:

Die Repository-Schnittstellen Teil der Modellschicht und sind in der Infrastrukturebene implementiert. Bedenken Sie jedoch, dass Repositories wie vollständige Objekte gesammelt und gespeichert werden. Sie sind nicht wie eine Persistenzschicht modelliert und können daher keine Teile von Aggregatwurzeln speichern. Um komplexe Aggregatwurzeln zu konstruieren, kann eine Fabrik verwendet werden.

Denken Sie auch daran, dass ein effektives Design von den verwendeten (Persistenz-) Technologien abhängen muss.

0

CRUD funktioniert nicht gut mit domänengesteuertem Design. Im domaingesteuerten Design arbeiten Sie mit Verben und Substantiven der Domain. Anstatt einen neuen Auftrag zu erstellen, haben Sie einen Benutzer-Aggregatstamm, der "einen Auftrag erteilt". Wenn Ihr System voll von CRUD-Operationen ist, verwenden Sie kein domänengesteuertes Design, wie es verwendet werden sollte, und stattdessen fügen Sie einfach Komplexität zu einem ansonsten einfachen Problem hinzu.

Ein Verwaltungsbildschirm ist ein guter Kandidat für CRUD. Sie haben eine Liste mit einigen Elementen, bei denen Hinzufügen oder Ändern keine Geschäftsregeln (Domänenregeln) aufweist, die erzwungen werden müssen. Es ist einfach nur "neue Zeile einfügen, ändern Sie diese Zeile, löschen Sie diese Zeile".

Ein Auftragsbearbeitungssystem ist komplexer und wird vom domänenorientierten Design profitieren. "Eine Bestellung aufgeben". "Bestellung bezahlen". "Wenn eine Bestellung aufgegeben wurde und die Zahlung abgeschlossen ist, starten Sie den Versandvorgang". Diese haben komplexe Regeln, die in der Domäne modelliert werden müssen, und daher ist domänengesteuertes Design ein guter Kandidat.