public static IEnumerable <IDomainEvent> Decide(IDomainCommand command, IEnumerable <IDomainEvent> pastEvents) { var decisionProjection = new DecisionProjection(); foreach (var domainEvent in pastEvents) { decisionProjection.Apply(domainEvent); } var uncommittedEvents = command switch { StartOrder startOrder => Decide(startOrder, decisionProjection), TakeMarchandise takeMarchandise => Decide(takeMarchandise, decisionProjection), _ => new List <IDomainEvent>() }; return(uncommittedEvents); }