Frage

Wenn Domain Ereignisse Umsetzung der Event-Handler nur für rein Domain Bedenken verwendet werden sollte; etwas, dass Sie mit dem Geschäft Experten diskutieren würden, oder sie öffnen, um durch irgendetwas verwendet werden, die ein Interesse an dem Domain-Modell hat?

Dies ist wahrscheinlich am besten erklärte mit einem einfachen Beispiel, eine Kalenderanwendung für die Planung der Arbeit an Mitarbeiter berücksichtigen.

Wir könnten die folgenden Domain-Ereignisse haben ...

AppointmentAdded AppointmentRemoved AppointmentContentChanged AppointmentMoved

Wir haben Handler für diese Ereignisse, zum Beispiel, wenn ein Termin zu einer Zeit außerhalb der Mitarbeiter bewegt Arbeitszeit wir ein Warn-Flag gesetzt.

Es gibt natürlich Antrag betrifft, die in diesen Ereignissen interessiert sind, z.B. Wenn ein Termin in den Kalender hinzugefügt wird, sollten wir es auf die Arbeitseinheit hinzufügen, damit wir später die Änderungen übertragen können.

Falls diese Anwendung betrifft die Verbraucher über die Domain Ereignisse sein, oder sollten wir erheben und verarbeiten separaten Systemereignisse statt?

War es hilfreich?

Lösung

Es gibt zwei gut etablierte Wege der Ereignisse in einer DDD-Lösung.

Die erste basiert auf Udi Dahan Artikel über Ereignisse . Wenn Sie nicht sie bereits gelesen haben, ich sehr empfehlen. Zusammenfassend heißt es, dass Sie Ihre Veranstaltungen mit statischer Klasse neben Normal-ORM-Stil Verhalten veröffentlichen. So können Sie einen Auftrag zu Auftrag des Kunden Sammlung und hinzufügen, veröffentlichen Sie die Veranstaltung. Weil Ihre Domain Verhalten innerhalb einer Transaktion Umfang ausgeführt wird, sind so Event-Handler. Sie könnten auch dort finden und Beratung nicht manuell Objekte zu einer Arbeitseinheit befestigen. Neue Aggregat Wurzeln sollten unter Berufung auf das Verhalten auf bestehende erstellt werden.

Es ist eine weitere Option, die von Greg Young gefördert wird. Es basiert auf Ereignisse Sourcing basiert, die im Grunde Ereignisse als Mittel der persistierenden Zustand verwendet wird. Bei diesem Ansatz in der Regel Ihre aggregierten Wurzeln eine Infrastruktur (zum Beispiel Basisaggregat Wurzelklasse) verwenden, um Ereignisse zu bewerben. Gegenstandslos invoke einen Event-Handler auf der Gesamtwurzelklasse und veröffentlicht dieses Ereignis auf einem Bus (was auch immer-Bus-Implementierung Sie verwenden).

Andere Tipps

Wenn Sie Querschnittsthemen bedeuten, als Sie es ohnehin zu verwenden, gezwungen sein werden, wenn Ihre Anwendungslogik erfordert. So ist es mit anderem Event-Verarbeitung Code gemischt werden.

Wenn Sie aber mehr unabhängigen Dinge tun, wenn Ihre Domain Ereignis passiert, als Sie besser separate Event-Handler zu verwenden (siehe Separation of Concerns Prinzip).

Im ersten Fall, der übrigens versuchen mit Ereignisverarbeitung (Infrastruktur) Logik Mischdomänenlogik zu vermeiden. Linke Infrastruktur / Querschnittsthemen Code in Ereignishandler aufrufen Bereichsverfahren. Verschieben Domain Code innerhalb Domänenobjekte Methoden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top