Ich versuche Wege von DDD und verwandten Themen zu lernen. Ich hatte die Idee eines einfachen begrenzten Kontextes zur Implementierung von "Bank": Es gibt Konten, zwischen denen Geld eingezahlt, abgehoben und übertragen werden kann. Es ist auch wichtig, die Änderungshistorie zu führen.
Ich habe die Account- Entität identifiziert und diese Ereignisbeschaffung wäre gut, um Änderungen daran zu verfolgen. Andere Entitäten oder Wertobjekte sind für das Problem irrelevant, daher werde ich sie nicht erwähnen.
Bei der Betrachtung von Ein- und Auszahlungen ist dies relativ einfach, da nur ein Aggregat geändert wird.
Bei der Übertragung ist es anders - zwei Aggregate müssen durch ein MoneyTransferred- Ereignis geändert werden . DDD lehnt es ab, mehrere Aggregate in einer Transaktion zu ändern. Andererseits besteht die Regel der Ereignisbeschaffung darin, Ereignisse auf Entitäten anzuwenden und den Status basierend auf diesen zu ändern. Wenn das Ereignis einfach in der Datenbank gespeichert werden könnte, gäbe es kein Problem. Um jedoch eine gleichzeitige Änderung von Entitäten aus Ereignisquellen zu verhindern, müssen wir eine Versionierung des Ereignisstroms jedes Aggregats implementieren (um die Transaktionsgrenzen beizubehalten). Mit der Versionierung kommt ein weiteres Problem: Ich kann keine einfachen Strukturen verwenden, um Ereignisse zu speichern und sie zurückzulesen, um sie auf Aggregate anzuwenden.
Meine Frage ist - wie kann ich diese drei Prinzipien zusammenführen: "ein Aggregat eine Transaktion", "Ereignis-> Änderung im Aggregat" und "Verhinderung gleichzeitiger Änderungen"?