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.
Nehmen wir an, wir müssen eine "Bulk" -Operation mit Entitäten durchführen, und die Anzahl der Entitäten macht es absolut unmöglich, sie in den Speicher zurückzuholen. I.e. Operation kann nur in der Datenbank durchgeführt werden.
Wo ist der Platz für einen solchen "Bulk" Betrieb? Sollte es eine Methode für das Repository sein? Wird die Repository-Abstraktion nicht mit einer datenbankspezifischen Operation "ausgeleert"? Wird die Geschäftsoperation nicht von Entität in Repository verschoben?
Ich denke, es sollte ein Service sein.
Evans empfiehlt in seinem Buch, dass, wenn Sie Zweifel haben, ob Sie eine Methode, die in einer Klasse "schlecht riecht" platzieren, weil Sie denken, dass es nicht dorthin gehört, machen Sie eine ServiceFoo-Klasse mit der Operation innerhalb. p>
Ich sehe nichts falsch daran, Massenaufgaben als Methoden in Ihr Repository zu stellen. Sie lecken nichts. Eine Bulk-Operation bedeutet keine datenbankspezifischen Operationen, es sei denn, Ihre Methode ist etwas wie ReBuildMSSQLIndexesOnMyBigTable ().
Was Sie brauchen, ist ein Service im domainorientierten Design. Dienste werden zum Modellieren von Verfahrensaufgaben verwendet. Ein Massenaktualisierungsvorgang, wie der von Ihnen beschriebene, wäre ein idealer Kandidat für einen Dienst.
BEARBEITEN: 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. Ссылка
Sie sollten keine Speicher-, Abruflogik im Domänenobjekt haben (ich nehme an, dass Sie ein Domänenmodell 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.
Tags und Links design domain-driven-design abstraction ddd-repositories