Welche Optionen gibt es, um ein Ereignis zu validieren, das ein anderes Modell verwendet?
Eine domain event
ist ein wichtiges Ereignis aus der Sicht des Geschäfts. Es ist etwas, das in der Vergangenheit passiert, also kann es nicht geändert werden. In OO wird es normalerweise als Value Object
dargestellt, das heißt, ein unveränderliches Objekt, wo der interessante Teil ihre Attribute sind.
Üblicherweise sind diese Domain Events
Ausbeute von einer Operation in einem Aggregate Root
(DDD Jargon). Der Client der Aggregate Root
ist der Application Service
(alias Use Case). Die Application Service
erhalten ein Command
Objekt und Basis darauf, führt die Operation in der Aggregate Root
.
Die Validierung könnte in primitiver Validierung, Objektvalidierung und/oder zusammengesetzter Objektvalidierung bestehen. Dann sollte das Objekt, das diese Validierung durchführen soll, die Aggregate Root
selbst und/oder einige Objekte mit dem spezifischen Ziel in der Validierung sein.
Wenn ein Wagen Artikel in den Warenkorb hinzufügen, sollte es eine Prüfung sein , wenn der Artikel aus noch nicht verkauft wird
Nach Ihrem Beispiel woulb die Objekte sein:
- Befehl:
AddItemToShoppingCartCommand
. Enthält Informationen über den hinzuzufügenden Artikel und beispielsweise eine Einkaufswagen-ID.
- Anwendungsdienst:
AddItemToShoppingCartService
.
- Aggregatwurzel:
ShoppingCartInventory
. Ich habe absichtlich Inventory
im Namen verwendet, um explizit zu sein, dass diese Aggregate Root
die Invariante "... erfüllen, wenn der Artikel noch nicht ausverkauft ist."
Hinweis: Meiner Meinung nach ist die Invariante, die das Inventar in den Aggregate Root
prüft, macht die Aggregate zu groß Mein Rat ist, diese Invarianten entspannen und Eventual Consistency umarmen, wenn diese.‚Ausverkauft‘es ist nicht normal passieren
Ereignisse im Ereignis Sourcing Sinn des Begriffs kann nicht validiert werden, sie sind bereits passiert. – guillaume31