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:
Order
? Wie setze ich das technisch um? Soll ich zur Übertragung von Ereignissen einen Servicebus verwenden?