так сильно нарушать?)
просто используйте DI public interface ICommandService<TCommand> { void Execute(TCommand command); } public class ApproveOrderService : ICommandService<ApproveOrderModel> {} public OrderController( ICommandService<ApproveOrderModel> orderApprover, ICommandService<CancelOrderModel> orderCancellor, ...)
что для публикации доменных событий используете
public interface IEventHandler<TEvent> { void Handle(TEvent e); } public class OrderFulfillment : IEventHandler<OrderApproved> { public class ApproveOrderService : ICommandService<ApproveOrder> { private readonly IOrderRepository repository; private readonly IEventHandler<OrderApproved> handler;
зачем инжектить хэндлер в сервис
Накапливаем доменные события в доменной сущности, диспатчим в нужный момент, например в момент сохранения в бд, диспатч происходит на апп левел. Дальше там делаем что хотим, например интеграционный ивент в шину
Обсуждают сегодня