我是CQRS的新成员,想学习模式的工作顺序。我的命令处理程序和命令是这样的:CommandHandler和EventHandler订单
public interface ICommandHandler<in TCommand> where TCommand : ICommand
{
void Handle(TCommand command);
}
当我cerate一个工作一个命令处理程序工作。
public class CreateWorkCommandhandler : ICommandHandler<CreateWork>
{
public void Handle(CreateWork command)
{
Save to database...
}
}
而我不会在控制器类中调用命令处理程序。我使用CommandExecuter
按类型调用命令。
public class CommandExecuter
{
public static void ExecuteCommand<TCommand>(TCommand command) where TCommand : ICommand
{
var handlerType = typeof(ICommandHandler<>).MakeGenericType(command.GetType());
var handlers = serviceLocator.GetAll(handlerType);
foreach (var handler in handlers)
((dynamic)handler).Handle((dynamic)command);
}
}
我想发送电子邮件,发送短信和其他东西下班后创建。但由于分离的体系结构,我无法在Handle(CreateWork command)
中执行这些步骤。
我认为这些步骤是事件,这是真的吗?所以我需要event
和event handler
类型。
public interface IEventHandler<in TEvent> where TEvent : IEvent
{
void Handle(TEvent event);
}
我在哪里填充事件?在CommandExecuter或CommandHandler我需要事件的多个事件。例如:
公共类WorkCreated:IEvent {}
发送短信,发送电子邮件。
我同意这个foreach不适合处理程序。最好是执行handlers.single()以确保该命令只有一个处理程序。 – user707727