Ich lese seit fast zwei Jahren über domänengetriebenes Design und führe einige Konzepte vorsichtig in meine tägliche Arbeit ein oder erstelle zumindest Pläne dafür, wie Dinge, die ich regelmäßig in einem domänengetriebenen Design mache, getan werden können.
Eine Schlussfolgerung, zu der ich zu kommen beginne, insbesondere nachdem ich mehr über Event Sourcing und Command Query Responsibility Segregation (CQRS) gelesen habe, dass Domänenobjekte möglicherweise nur für Schreibzwecke verwendet werden sollen. Um es klarer zu machen, scheint es so zu sein, als ob die Leute in einem Großteil der Dokumentation, die ich gelesen habe, subtil vorschlagen, dass die Domänenobjekte für domänenzentrierte Operationen / Berechnungen und Überprüfungen verantwortlich sind und dann hauptsächlich dazu dienen, einen Weg zum Durchhalten zu finden die Infrastruktur, die in einer Repository-Implementierung bereitgestellt wird. Obwohl mir die Tatsache gefällt, dass dies das Domänenmodell erheblich vereinfachen kann, da es die Verantwortung für die Offenlegung des Status ausschließt.
Wenn es in der Tat richtig ist, dass Domänenobjekte hauptsächlich als schreibgeschützte Objekte verwendet werden sollen, wirft dies einige Fragen für mich auf, auf die ich hoffe, dass jemand antworten kann.
- Wie führt man Komponententests für ein Objekt durch, das Setter enthält, oder für Methoden, die den Status eines Objekts ändern, aber keine nach außen hin öffentliche Schnittstelle zum Lesen des Status bereitstellen, z. B. Eigenschafts-Getters in C #? Ist es in Ordnung, den Status nur zu dem Zweck offenzulegen, das Objekt testbar zu machen?
- Wie kann man einem Benutzer die Ergebnisse von Berechnungen oder Operationen anzeigen, die in der Domäne ausgeführt wurden, ohne dass diese beibehalten werden müssen, und dann die Ergebnisse aus dem permanenten Speicher außerhalb des Domänenkontexts abrufen? Ist es in Ordnung, den Status nur zum Zwecke der Ergebnisdarstellung freizugeben?
Ist die Faustregel, dass die einzigen Eigenschaften, die Zugriff erhalten, diejenigen sein sollten, die auch in der Domäne beschreibbar sind? Oder anders gesagt: Nur readonly-Eigenschaften sollten vermieden werden, da sie nur zu Lesezwecken vorhanden sind und somit im eigentlichen Domain-Modell keine notwendige Rolle spielen?
Zugehöriges Material:
Nr CQRS können neben DDD verwendet.
quelle
Bei den Unit-Tests Ihres Domänenmodells sollte überprüft werden, ob für jeden ausgeführten Befehl die richtigen Domänenereignisse ausgelöst werden. Ihre Domänenbefehle und erfassten Ereignisse können nach dem Status abgefragt werden.
Sie können auch
ToString()
Ihre Domänenbefehle und -ereignisse überschreiben , um eine automatische, lesbare Statusmeldung zu erhalten.Um Ihre zweite Frage zu beantworten und die Ergebnisse von Befehlen anzuzeigen, sollten Sie dafür sorgen, dass Domänenereignisse in Ihrem Lesemodell "veröffentlicht" werden.
quelle