Wer ist für die Mutation der Entität verantwortlich, wenn ein Domänenereignis ausgelöst wird? DDD

Ich habe gelernt, über CQRS/ ES. Bei kleinen Beispielprojekten sehe ich oftEreignisse, die den Entitätsstatus ändern. Zum Beispiel, wenn wir uns das @ ansehOrder aggregate root:

public class Order : AggregateRoot {
    private void Apply(OrderLineAddedEvent @event) {
        var existingLine = this.OrderLines.FirstOrDefault(
            i => i.ProductId == @event.ProductId);

        if(existingLine != null) {
            existingLine.AddToQuantity(@event.Quantity);
            return;
        }

        this.OrderLines.Add(new OrderLine(@event.ProductId, @event.ProductTitle, @event.PricePerUnit, @event.Quantity));
    }

    public ICollection<OrderLine> OrderLines { get; private set; }

    public void AddOrderLine(/*parameters*/) {
        this.Apply(new OrderLineAddedEvent(/*parameters*/));
    }

    public Order() {
        this.OrderLines = new List<OrderLine>();
    }

    public Order(IEnumerable<IEvent> history) {
        foreach(IEvent @event in history) {
            this.ApplyChange(@event, false);
        }
    }
}

public abstract class AggregateRoot  {
    public Queue<IEvent> UncommittedEvents { get; protected set; }

    protected abstract void Apply(IEvent @event);

    public void CommitEvents() { 
        this.UncommittedEvents.Clear();
    }

    protected void ApplyChange(IEvent @event, Boolean isNew) {
        Apply(@event);
        if(isNew) this.UncommittedEvents.Enqueue(@event);
    }
}

wannOrderLineAddedEvent wird angewendet, es mutiertOrder durch Hinzufügen einer neuen Bestellposition. Aber ich verstehe diese Dinge nicht:

wenn es ein richtiger Ansatz ist, wie werden dann die vorgenommenen Änderungen beibehalten?Oder soll ich das Event irgendwie an einen entsprechenden Handler von @ veröffentlichOrder? Wie setze ich das technisch um? Soll ich zur Übertragung von Ereignissen einen Servicebus verwenden?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage