Przeczytaj podejście do implementacji po stronie z wykorzystaniem CQRS

Przeniosłem się do projektu, który aktywnie korzysta z CQRS + event sourcing. Od pierwszego spojrzenia jest realizowany zgodnie z tymi wszystkimi książkami i blogami, ale w końcu zdałem sobie sprawę, co dokładnie jest peevish w realizacji.

Oto Architektura CQRS: CQRS design

Oryginalnie zrobiłem to zdjęcie z tutaj .

Jak widać na obrazku, strona odczytywana odbiera zdarzenia z kolejki i przekazuje je jeden po drugim do różnych zestawów projekcje (denormalizery), a następnie wynikowe modele widoku są zapisywane za pomocą metody AddOrUpdate do, powiedzmy, DB. Więc jak rozumiem z obrazka denormalizer może polegać tylko na samym zdarzeniu plus DANE z db po stronie odczytu. Na przykład:

  1. widok konta już zapisany w db.
  2. nadchodzi Event EmailChanged
  3. odczytujemy Widok konta z DB
  4. Zastosowanie do niego zmiany adresu e-mail
  5. zapisujemy konto z powrotem do DB.

Inny case (liczenie ilości niektórych elementów, powiedzmy zamówień):

  1. ordercreated event przybywa
  2. odczytujemy model widoku, który reprezentuje liczbę wcześniej przybyłych zamówień
  3. Increment i zapisz to.

Co mamy w naszym projekcie: Używamy wszystkich tych zdarzeń tylko jako powiadamiacza, że coś się zmieniło w modelu domeny. Stąd, co robimy:

  1. bierzemy repozytorium domeny i odczytujemy wszystkie niezbędne Agregaty. W ten sposób otrzymujemy najnowszy stan oni.
  2. po prostu budujemy obiekt ViewModel od zera
  3. Zapisz nowo utworzony obiekt do Db

Podejście, które stosujemy w naszym projekcie, wydaje mi się nieco dziwne, nie widzę jednak wszystkich jego wad. Jeśli musimy przebudować naszą stronę odczytu, dodajemy" aktywny " denormalizer i następnym razem, gdy otrzyma konkretne zdarzenie, odtwarza nowy viewmodel.

Jeśli użyjemy podejścia z książek, będę musiał mieć oddzielną logikę utils gdzieś poza moim systemem do odbudowy. Czego potrzebujemy do tego:

  1. Drop the read side
  2. odczyt wszystkich zdarzeń ze sklepu zdarzeń od początku
  3. przeprowadź je przez projekcje

Więc moje pytanie brzmi:
Jakie jest właściwe podejście?

Author: Max, 2013-04-10

1 answers

Podejście, które stosujemy w naszym projekcie, wydaje mi się nieco dziwne, nie mogę Zobacz wszystkie jego wady.

Jedną z istotnych wad jest to, że po otrzymaniu zdarzenia, musisz wykonać dodatkowe wezwanie do repozytorium odpowiedniego agregatu. Oznacza to, że to repozytorium musi być ujawnione, bezpośrednio lub jako usługa. Oprócz zwiększonych zależności jest dodatkowe IO.

Do przebudowy ze sklepu eventowego, podejście, które opisujesz jest ogólnie przyjętą metodą. Podejście opisane tutaj wykorzystuje dziennik zdarzeń dedykowany do przebudowy projekcji. Może to być wykorzystane do rozwiązania problemów z wydajnością podczas przebudowy. Zapoznaj się również z skalowalnymi i prostymi widokami CQRS w chmurze i na liście dyskusyjnej DDD/CQRS.

 5
Author: eulerfx,
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-11 23:11:20