8

In DDD ist eines der Schlüsselkonzepte das Repository, mit dem Sie Entitäten (oder Aggregatwurzeln) abrufen und dann speichern können, nachdem sie aktualisiert wurden.Wo gehören alle "Bulk" -Operationen in DDD?

Lassen Sie uns annehmen, dass wir einige "Bulk" -Operationen mit Entitäten durchführen müssen, und die Anzahl der Entitäten macht es absolut unmöglich, sie im Speicher abzurufen. I.e. Die Operation kann nur in der Datenbank ausgeführt werden.

Wo ist der Platz für solche "Bulk" -Operationen? Sollte es eine Methode für das Repository sein? Wird die Repository-Abstraktion nicht mit einer datenbankspezifischen Operation "ausgeleert"? Wird der Geschäftsvorgang nicht von Entity in Repository verschoben?

+0

Fragen Sie nach großen Aktualisierungen in einer Reihe von Datensätzen? (Sagen Sie, Millionen von Preisen mit einer einzigen Update-Anweisung zu berechnen.) –

Antwort

5

Ich denke, es sollte ein Service sein.

Evans empfiehlt in seinem Buch, wenn Sie im Zweifel sind, eine Methode, die "schlecht riecht" innerhalb einer Klasse, weil Sie denken, dass es nicht dorthin gehört, eine ServiceFoo-Klasse mit der Operation innerhalb machen.

+0

Es ist 9 Jahre, ich hoffe, jemand kann helfen, diese Follow-up-Frage zu beantworten. Wenn wir den Service implementieren würden, würde er dann das gesamte Aggregat durchlaufen und speichern/hinzufügen/zurück zum Repository hinzufügen? – Fajarmf

4

Ich sehe nichts falsch mit Massenaufgaben als Methoden in Ihrem Repository setzen. Sie lecken nichts. Eine Bulk-Operation bedeutet keine datenbankspezifischen Operationen, es sei denn, Ihre Methode ist etwas wie ReBuildMSSQLIndexesOnMyBigTable().

1

Sie sollten nicht speichern, abrufen Logik in Domain-Objekt (ich nehme an, dass Sie Domain-Modell verwenden). Dafür ist das Repository verantwortlich. Ihre Bulk-Methode gehört also in das Repository.

Wenn Sie ORM verwenden, sind Ihre Repositorys nicht von der Datenbank abhängig. sie würden alle Anfragen an die ORM-Schicht weiterleiten.

Wenn Sie Ihren eigenen Mapper schreiben, leitet das Repository die Anforderung an den Mapper für die Entität weiter. Und ich denke, diese Kopplung ist in Ordnung.

2

Was Sie brauchen, heißt service im domänengesteuerten Design. Dienste werden zum Modellieren von Verfahrensaufgaben verwendet. Ein Massenaktualisierungsvorgang, wie der von Ihnen beschriebene, wäre ein idealer Kandidat für einen Dienst.

EDIT: Der ursprüngliche Link verschwand. 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

der Link zum DDD-Dienst scheint tot (kein Inhalt auf Seite/Domäne) – jasper