0

ich einige kleine Forschung über Domain Veranstaltungen gemacht haben, und einige verschiedene LösungenDDD: Domain Events Implementierung in monolithische Anwendung

  • Udi Dahan Lösung, die Ereignisse gefunden haben sofort
  • Deferred Domain Ereignisse behandeln, die Feuer off hauptsächlich in Infrastruktur
  • Domain Events das Ergebnis zurück

Fragen:

  • Welcher ist eine reine Domain Events?
  • Ist es möglich, alle im selben Projekt zu haben?
  • In diesem Fall, wie soll ich sie benennen und unterscheiden?
  • Wo EventHandler registrieren? Jemand erwähnt, dass Application Service ist Ort, aber here Ich habe gesehen, dass es direkt in das Domain-Modell registriert wurde und dort auch behandelt, und nicht in separaten Event-Handler-Klasse.

Eine zusätzliche Frage.

Zum Beispiel: Wenn die Bestellung erstellt und bezahlt wird, muss sie den Status "OrderPaid" erhalten.

Da Einkauf und Bestellung zwei verschiedene Kontexte sind, müssen wir direkt nach der Bestellung ein Domain-Event erstellen, das von Event Handler im beschränkten Context des Einkaufs behandelt werden sollte, aber als Ergebnis der Event-Behandlung sollte es erhöht werden mehr Domain Event - OrderPaid, das möglicherweise erneut vom Order-Kontext behandelt wird. Bei einer Monolith-Anwendung scheint es, als könnte eine Lösung lauten: Übergeben Sie das Order-Objekt an Event-Handler, um das erwartete Verhalten zu erreichen. Gibt es andere Wege, wie man es in einem solchen Architekturstil lösen kann?

+0

Für mich, und das ist ziemlich subjektiv, ziehe ich Udi's Domain-Events vor. Es scheint mir am reinsten zu sein. –

+0

@AdrianThompsonPhillips dann, wie Sie den Fall von Beispiel oben lösen würden? – user1016265

Antwort

1

Domänenereignisse wurden erfunden, um ein besser gekapseltes Domänenmodell bereitzustellen. Es gibt keine reine Implementierung als solche, nur unterschiedliche Implementierungen mit unterschiedlichen Kompromissen. Sie können Ihre Ereignisse im selben Projekt haben, und es gibt zahlreiche Hinweise zur Benennung von Ereignissen in den Artikeln, auf die Sie verwiesen haben.

Wenn Sie lange laufende Prozesse verarbeiten möchten, die schließlich zwischen verschiedenen begrenzten Kontexten konsistent sind, würde ich wahrscheinlich in die Verwendung eines gemeinsamen Nachrichtenbusses wie NServiceBus oder MassTransit schauen.

+0

Danke für Ihre Antwort, aber wie würden Sie den Fall aus dem obigen Beispiel lösen? Würdest du es mit DomainEvents lösen? Mit welcher Hilfe der Implementierung? – user1016265

+0

Es ist schwer zu sagen, ohne viel mehr zu wissen. Von dem, was Sie gepostet haben, glaube ich nicht, dass ich mich dafür entscheiden würde, Domain-Ereignisse zu verwenden (vielleicht abgesehen von dem Auslösen von E-Mails an den Kunden). Ich bin mir nicht sicher, was im Einkaufsteil der Domain passiert, aber wenn die beiden beschränkten Kontexte kommunizieren müssen und der Einkaufskontext im Bestellkontext "downstream" ist, würde ich wahrscheinlich die Nachverfolgung einer Bestellung kontrollieren Verwenden Sie im Auftragskontext einen lang andauernden Prozess oder Saga, und verwenden Sie dann einen Nachrichtenbus oder Webdienste, um zwischen den beiden Domänen zu kommunizieren. –

+0

warum nicht? Es ist ein Geschäftsereignis, für das Domain Events verwendet werden müssen, oder? Um den Einkaufskontext zu vereinfachen, muss die Bestellung einfach per Payment Gateway bezahlt werden.Und vergiss nicht, dass es eine monolithische Anwendung ist, sollte ich dort einen zusätzlichen Webmediator verwenden? – user1016265