Domänenereignisse im Vergleich zu Integrationsereignissen

Das Entwerfen einer Anwendung kann manchmal schwierig sein, insbesondere wenn Sie mehrere Domänen entwerfen und diese miteinander interagieren müssen. Um diese Komplikationen zu vermeiden, können wir einige Konzepte und Implementierungen in unserer App nutzen.

In diesem Beitrag teile ich einige Gedanken zu Domain-Ereignissen und Integrationsereignissen sowie einige praktische Beispiele und beziehe sie auf das Design einer Anwendung.

Domain-Ereignisse

Was ist es ?
Laut Martin Fowler fängt ein Domain-Event „die Erinnerung an etwas Interessantes ein, das sich auf die Domain auswirkt“.

Was ist es in der realen Welt?
Nehmen wir an, John und Mark arbeiten im Verkaufsbereich eines Unternehmens zusammen und erledigen Papierkram. Zunächst erstellt John ein handgeschriebenes Budget, indem er eine Kundenanfrage entgegennimmt und einige Steuern berechnet. Danach nimmt Mark dieses Papier und faxt es an den Kunden (existiert es noch?).

Basierend auf dieser Geschichte können wir feststellen, dass Marks Job mit Johns Job zusammenhängt, aber sie sind nicht unbedingt gebunden. Beispielsweise kann Mark auf alle Budgets eines Tages warten und sie dann an die Kunden senden.

Mit anderen Worten, das Erstellen eines Budgets gehört zu derselben Domäne, in der der Kunde über dieses Budget informiert wird, diese Aktionen sind jedoch nicht Teil desselben Prozesses.

Am Ende haben wir einen „Speicher“ für ein Budget erstellt, der sich auf die „Verkaufsdomäne“ auswirkt, indem dieser Speicher zum Senden des Budgets an den Kunden verwendet wird.

Was ist mit dem Design der Anwendung?
Sie müssen in einer bestimmten Domäne oder derselben logischen Anwendung implementiert werden. Die Grenzen müssen sehr gut abgegrenzt sein.
Wenn wir eine Anwendung für unsere Story entwerfen, haben wir das folgende Szenario:

Eine Anwendung, die eine Kundenanfrage entgegennimmt, die Steuern berechnet, das Budget registriert und dann ein Ereignis veröffentlicht, bei dem ein Budget erstellt wurde.
Ein sekundärer Prozess abonniert die Domain-Ereignisse, beginnt mit dem Abhören des Ereignisses "Budget erstellt" und sendet dann eine E-Mail an den Kunden, wenn dieser Speicherplatz belegt ist.

Was sind die Vorteile davon?
Ich kann einige Vorteile aufzählen:

  • Trennung von Bedenken, um Ihre Wartungsprozesse zu vereinfachen;
  • Eine gute Modellierung Ihres Codes unter Verwendung des allgegenwärtigen Sprachkonzepts.
  • Testbarkeit, weil ein Prozess nicht vom anderen abhängt.

Integrationsereignisse

Was ist es ?
Ein festgeschriebenes Ereignis, das in der Vergangenheit in einem begrenzten Kontext stattgefunden hat, der für andere Domänen, Anwendungen oder Dienste von Drittanbietern interessant sein kann.

Was ist es in der realen Welt?
Nehmen wir nun an, John geht nach Beendigung seiner Arbeit in die Marketingabteilung des Unternehmens und liefert eine Kopie des Budgets. Mit dieser Kopie in Händen wählt Julia einige gute Kunden aus, um einen speziellen Rabatt-Coupon für die nächsten Einkäufe auszuliefern.

Wenn wir diesen Teil der Geschichte hinzufügen, stellen wir möglicherweise fest, dass Julia Teil einer anderen Domain namens Marketing Domain ist.

Beachten Sie außerdem, dass dasselbe Ereignis in der Vergangenheit stattgefunden hat (Budget erstellt), jetzt jedoch in einer anderen Domäne. Dies bedeutet, dass sie nicht wissen muss, wie das Budget erstellt, berechnet oder sogar an den Kunden gesendet wurde. Sie muss nur ihre Marketing-Arbeit erledigen.

Was ist mit dem Design der Anwendung?
Dieses Szenario konzentriert sich nicht auf das spezifische Anwendungsdesign, sondern auf das gesamte System. Wenn es sich um verteilte Systeme handelt, können wir uns zwei getrennte Anwendungen vorstellen: Vertrieb und Marketing.

Die Verkaufs-App gibt ein "Budget erstellt" -Ereignis aus und die Marketing-App reagiert dann auf dieses Ereignis, indem sie die Marketing-Kampagne sendet.

Was sind die Vorteile davon?

  • Trennung von Bedenken auf der gesamten Systemebene, da das Vertriebssystem nach einem Ereignis, bei dem ein Budget erstellt wurde, keine Informationen zu den Prozessen in anderen Systemen erhalten möchte. Andere interessierte Domänen können dieses Ereignis jetzt abonnieren, ohne zu wissen, wie es aufgetreten ist, aber wann es aufgetreten ist.
  • Skalierbarkeit. Wenn das Verkaufsteam hart arbeitet, bis Hunderte von Budgets erstellt sind, können Sie mehr „Arbeiter“ öffnen, die diese Ereigniswarteschlange abhören, und die Arbeit erledigen, wenn die Last zunimmt.
  • Ein weiterer Aspekt ist, dass Sie die Projekte auf Teams aufteilen, sie als Produkte behandeln und sie arbeiten, entwickeln und die Regeln ändern können, ohne das andere Team zu stören.

Abschließende Gedanken

Diese Konzepte verbessern die Qualität Ihrer Software, aber Sie müssen beim Entwerfen eines Systems vernünftig sein.

Domänenereignisse und Integrationsereignisse können Ihr Leben erleichtern, Sie müssen sich jedoch darum kümmern, wann dies erforderlich ist. Wenn Sie zum Beispiel eine einfache CRUD-Anwendung erstellen müssen und nichts mehr damit zu tun hat, müssen Sie mit Sicherheit keine große Architektur entwerfen, um dies zu bewältigen. Sei einfach vernünftig und halte es einfach.

Dieser Artikel ist auch in Portugiesisch verfügbar.