【发布时间】:2016-11-13 14:16:16
【问题描述】:
我的命令和处理程序位于两个不同的层。我希望我的命令成为 POCO,并且对它的处理程序一无所知。 我想到的解决方案是这样的:
public interface ICommand
{
string GetHandler();
}
public interface ICommandHandler
{
void HandleCommand(ICommand command);
}
public class XCommand : ICommand
{
//...
public string GetHandler()
{
return "xh";
}
}
[Handler("xh")]
public class XCommandHandler : ICommandHandler
{
public void HandleCommand(ICommand command)
{
//handle
}
}
这是命令模式吗?
【问题讨论】:
-
这看起来像命令/查询响应分离 (CQRS)
-
动词
handle有点模棱两可。如果你给出一个处理命令的具体例子,你的问题会更清楚。问题是在Command模式中,有一个execute()方法可以执行命令。如果这就是您所说的句柄,那么正如@jaco0646 所说,它被封装在命令本身中。另一方面(没有双关语),Invoker与经典模式中的命令完全分离。调用者“处理”命令,但实际上只是在它们上调用execute()。 -
如您所说,使用“命令”和“句柄”可能会造成混淆。我有 FindRequest 和 Finder,我希望将这些对象解耦。于是我创建了一个FindExecuter,客户端通过FindRequest来执行。我在上面的帖子中放了一张图片来澄清问题。
标签: design-patterns command-pattern