Komunikacja Międzygrupowa w CQRS + DDD + Event Sourcing

W jaki sposób należy oddzielić agregatowe korzenie (AR) komunikować się ze sobą w środowisku zbudowanym na zasadach DDD przy użyciu agregatowego back-endu pochodzenia zdarzeń?

Na przykład, mam Facility zagregowany root (AR), który ma metodę fabryczną odpowiedzialną za tworzenie Booking AR. Booking jest zależną od czasu kombinacją Person AR i Facility AR. A Person można zarezerwować tylko w jednym Facility.

W DDD trzymałbym odniesienia do Booking w Person, i Person w Facility. Jednak podczas generowania zdarzeń do wykorzystania w event-sourcingu myślę, że próba obsługi deserializacji zdarzeń z zaplecza stanie się zaporowa. Dlatego zabrałem się tylko do przechowywania odwołań do unikalnych identyfikatorów opartych na obiektach value. pojawia się nowy problem, jednak gdy metoda Na AR musi wywołać inną metodę na innym AR-jak sobie z tym radzisz? Trafić do repozytorium źródła zdarzenia z AR domeny?

Jakie jest ogólne zastosowanie przypadek w tym scenariuszu? Źle do tego podchodzę?

Author: Peter Mortensen, 2010-06-23

2 answers

Zagregowane granice korzenia definiują granicę konsystencji. Wewnątrz kruszywa gwarantowana jest spójność. Na Zewnątrz... nie jest. Więc nie powinieneś mieć operacji, które obejmują kilka agregatów i muszą być spójne. Jeśli potrzebujesz transakcji obejmującej dwa agregaty, powinieneś przejrzeć swoje granice agregatów.

Dla rzeczy, które dzieją się poza agregatem, powinieneś mieć obsługę zdarzenia, która wyśle polecenie do innych agregatów. Jeśli logika działań pomiędzy agregaty są bardziej skomplikowane, można zdefiniować proces, maszynę stanową, która będzie nasłuchiwać zdarzeń i wysyłać polecenia do agregatów. Procesy mogą być używane do definiowania długotrwałych transakcji (z rekompensatą zamiast wycofywania) lub podejmowania decyzji biznesowych w oparciu o to, co dzieje się w systemie na dużą skalę (nawet między ograniczonymi kontekstami).

 38
Author: thinkbeforecoding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 20:16:11

W przypadku korzystania z Event sourcingu i CQRS najbardziej eleganckim (przynajmniej moim zdaniem)sposobem komunikacji między AR jest komunikowanie. Możesz spojrzeć na projekt Ncqrs (będzie łatwiej, jeśli jesteś facetem. NET), szczególnie gałąź 'Messaging'. Chodzi o to, że ARS implementuje interfejs IMessageHandler dla każdego typu wiadomości, które obsługują, A AR base class wystawia metodę Send do wysyłania tam wiadomości. Za pomocą tego API klienci mogą wywoływać zachowanie modelu, a sam model może komunikować się (między ARs).

 4
Author: Szymon Pobiega,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 09:09:07