protected abstract void When(DomainEvent @event);
 public void ApplyAndPublish(DomainEvent @event)
 {
     _uncommittedEvents.Add(@event);
     Apply(@event);
 }
 public void Apply(DomainEvent @event)
 {
     When(@event);
 }
 public void Causes(DomainEvent @event)
 {
     _uncommittedEvents.Add(@event);
     Apply(@event);
 }