【发布时间】:2016-06-09 18:29:42
【问题描述】:
我是 CQRS 的新手,想学习该模式的工作顺序。我的命令处理程序和命令是这样的:
public interface ICommandHandler<in TCommand> where TCommand : ICommand
{
void Handle(TCommand command);
}
当我创建一个工作时,一个命令处理程序正在工作。
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{}
发送短信,发送电子邮件。
【问题讨论】:
标签: design-patterns domain-driven-design cqrs command-pattern