Inicjalny stan agregatu - event sourcing

0

Cześć,

jeśli dobrze rozumiem event sourcing to mając zestaw zdarzeń powinienem być w stanie odtworzyć aktualny stan agregatu na dowolny moment w czasie. Co jednak z ustawieniem inicjalnych wartości? Czy na początku powinien być wysyłany event inicjujący wartości? Jest już określony pattern na taką sytuację?

Dla przykładu chciałbym mieć obiekt pizzy w którym zdarzenia oznaczałyby np. "wzięcie kawałka". Jak określić początkową ilość kawałków pizzy?

0

Nie wyobrażam sobie inaczej, niż event z kreowania też (dla typowych baz danych problem, nieznany klucz pierwotny)

Inaczej mówiąc odbiornikiem eventów w mojej wizji jest coś wyżej, nadrzędne w stosunku do encji / agregatu. Jeśli się mylę, proszę o krytykę

0

Jak najbardziej, musi być event tworzący początkowy stan agregatu. Np. coś takiego:

// Początkowy event
record PizzaDeliveredToCustomer(string PizzaId, string Description, int Slices);

// Agregat
class PizzaBeingEaten
{
  // Nowy agregat tworzony z command, gdzie command jest wynikiem powyzszego eventu
  public void Delivered(StartEatingPizza command)
  {
    // Ustawiamy stan agregatu
    _slices = command.Slices;
    // ...
  }
}

To tak to tworzysz zależy tak naprawdę od implementacji. Może być tak jak podałem wyżej, może być agregat z konstruktorem który przyjmuje początkowe wartości i jest tworzony za pomocą jakiejś fabryki, a nawet stan agregatu oddzielony od samego agregatu- wtedy wstrzykujesz zbudowany stan do agregatu.

0

Zapytam, bo strukturę j/w znam wyłącznie jako kibic.
Przelew z konta na konto, studencki przykład, jeden event który angażuje dwie encje, to jest ok?

Mam też pytanie o subtelności czasu, ale to nie z telefonu jak teraz

0
AnyKtokolwiek napisał(a):

Zapytam, bo strukturę j/w znam wyłącznie jako kibic.

Przelew z konta na konto, studencki przykład, jeden event który angażuje dwie encje, to jest ok?

Może lepiej podzielić na dwa eventy? WysłanoPrzelew i OtrzymanoPrzelew?

1

@AnyKtokolwiek:

  1. Przelew to encja. Konto (stan) to widok.
  2. Czas - nie ma czegoś takiego jak czas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1