DDD - zapis historii zamówienia

Odpowiedz Nowy wątek
2019-03-11 20:27
0

W moim modelu domenowym mam: zamówienie, pozycję zamówienia i historię zamówienia. Podzieliłem więc go na dwa agregaty:

  • zamówienie zawierające pozycję zamówienia (Order i OrderItem)
  • historię zamówienia (OrderHistory)

Jak ktoś zmieni status zamówienia - wywołanie metody SetShippedStatus() to rzucam event OrderStatusChangedEvent:

public class Order : Entity, IAggregateRoot
{
    public OrderStatus OrderStatus { get; private set; }        
    public List<OrderItem> OrderItems { get; private set; }

    public Order()
    {
        Id = Guid.NewGuid();
        OrderStatus = OrderStatus.New;
        OrderItems = new List<OrderItem>();
    }

    public void SetShippedStatus()
    {
        OrderStatus = OrderStatus.Shipped;

        AddDomainEvent(new OrderStatusChangedEvent(Id, OrderStatus));
    }
}

Czy zapis do historii zmiany statusu zamówienia powinno się realizować w event handlerze dla OrderStatusChangedEvent czy też ten event handler powinien rzucać komendę 'zapisz do historii zmianę statusu' i command handler powinien ten zapis realizować?

To mój agregat do historii zmiany statusu zamówienia:

public class OrderHistory : Entity, IAggregateRoot
{
    public Guid OrderId { get; private set; }
    public OrderStatus OrderStatus { get; private set; }
    public DateTime StatusModificationDate { get; private set; }

    public OrderHistory(Guid orderId, OrderStatus orderStatus)
    {
        Id = Guid.NewGuid();
        OrderId = orderId;
        OrderStatus = orderStatus;
        StatusModificationDate = DateTime.Now;
    }
}

Pozostało 580 znaków

2019-03-12 00:14
2

A jaki w ogóle ma sens osobny agregat dla historii zamowienia?

Pozostało 580 znaków

2019-03-12 04:57
0

Nad tym też się zastanawiałem czy historia nie powinna być częścią agragatu zamówienie - sugerujesz żeby zapisywać historię przy okazji zapisywania zamówienia bez rzucania eventu?

Pozostało 580 znaków

2019-03-12 06:44
0

1) Jeśli to jest agregat to IMO sporo eventów Ci brakuje, jak to jest bounded context to też jest złe podzielenie tego w ten sposób (zamówienie "zna" swoje możliwości)
2) Zmiksowałeś CQRS/ES do zabawy zamówieniami, w ogóle nie wiadomo czy ten tandem tu pasuje + ja mam wątpliwości czy w ogóle samo ES tu pasuje. Jakie masz oczekiwania względem użycia ES w czymś co wygląda w działaniu jak crud?

Pozostało 580 znaków

2019-03-12 15:22
0

@wiewiorek: nie wczytywałem się w Twój kod i idee, ale jak dla mnie to raczej nie może istnieć historia zamówienia bez zamówienia podobnie jak pozycja zamówienia. Nie jestem specem od DDD ale dla mnie historia powinna być częścią agregatu zamówienia.

Pozostało 580 znaków

2019-03-12 16:10
0
TurkucPodjadek napisał(a):

1) Jeśli to jest agregat to IMO sporo eventów Ci brakuje, jak to jest bounded context to też jest złe podzielenie tego w ten sposób (zamówienie "zna" swoje możliwości)
2) Zmiksowałeś CQRS/ES do zabawy zamówieniami, w ogóle nie wiadomo czy ten tandem tu pasuje + ja mam wątpliwości czy w ogóle samo ES tu pasuje. Jakie masz oczekiwania względem użycia ES w czymś co wygląda w działaniu jak crud?

Dałem tylko wycinek klasy.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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