15 Stimmen

Wo gehören alle "Bulk"-Operationen in DDD hin?

Eines der Schlüsselkonzepte in DDD ist das Repository, das es Ihnen ermöglicht, Entitäten (oder Aggregatwurzeln) abzurufen und sie nach ihrer Aktualisierung wieder zu speichern.

Nehmen wir an, wir müssen eine "Massen"-Operation mit Entitäten durchführen, und die Anzahl der Entitäten macht es absolut unmöglich, sie im Speicher abzurufen. D.h. die Operation kann nur in der Datenbank durchgeführt werden.

Wo ist der Platz für einen solchen "Massenbetrieb"? Sollte es eine Methode im Repository sein? Wird sie nicht die Abstraktion des Repository mit datenbankspezifischen Operationen "verraten"? Wird dadurch nicht der Geschäftsvorgang von der Entität zum Repository verlagert?

0 Stimmen

Fragen Sie nach der Durchführung umfangreicher Aktualisierungen an einer Reihe von Datensätzen? (Sagen wir, die Berechnung von Millionen von Preisen mit einer einzigen Aktualisierungsanweisung).

9voto

lurks Punkte 2486

Ich denke, es sollte eine Dienstleistung sein.

Evans empfiehlt in seinem Buch, dass man, wenn man im Zweifel ist, ob man eine Methode, die "schlecht riecht", in eine Klasse einfügen soll, weil man denkt, dass sie dort nicht hingehört, eine ServiceFoo-Klasse mit der Operation darin erstellen soll.

1 Stimmen

Es ist 9 Jahre her, und ich hoffe, jemand kann mir helfen, diese Frage zu beantworten. Wenn wir den Dienst implementieren, würde er dann alle Aggregate in einer Schleife erfassen und sie anschließend im Repository speichern/hinzufügen?

5voto

dthrasher Punkte 38508

Was Sie brauchen, ist ein Dienstleistung im bereichsbezogenen Design. Dienste werden zur Modellierung prozeduraler Aufgaben verwendet. Ein Massenaktualisierungsvorgang, wie der von Ihnen beschriebene, wäre ein idealer Kandidat für einen Dienst.

EDIT : Der ursprüngliche Link ist verschwunden. Sie können das Glossar der DDD Begriffe hier finden, aber es ist nicht so nützlich wie die ursprüngliche Seite. http://dddcommunity.org/resources/ddd_terms/

0 Stimmen

Der Link zum DDD-Dienst scheint tot zu sein (kein Inhalt auf der Seite/Domäne)

4voto

Darryl Braaten Punkte 5162
void DoLongInvolvedTask();

Ich sehe nichts Falsches daran, Massenaufgaben als Methoden in Ihr Repository aufzunehmen. Sie lassen nichts durchsickern. Eine Bulk-Operation zu haben, impliziert keine datenbankspezifischen Operationen, es sei denn, Ihre Methode ist so etwas wie ReBuildMSSQLIndexesOnMyBigTable().

2voto

StackUnderflow Punkte 22110

Sie sollten keine Logik zum Speichern und Abrufen im Domänenobjekt haben (ich nehme an, Sie verwenden ein Domänenmodell). Das ist die Aufgabe des Repositorys. Ihre Bulk-Methode gehört also ins Repository.

Wenn Sie ORM verwenden, dann sind Ihre Repositories nicht von der Datenbank abhängig, sondern leiten alle Anfragen an die ORM-Schicht weiter.

Wenn Sie Ihren eigenen Mapper schreiben, würde das Repository die Anfrage an den Mapper für die Entität weiterleiten. Und ich denke, diese Kopplung ist in Ordnung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X