【发布时间】:2009-03-13 04:06:48
【问题描述】:
我遇到了一种被称为“处理程序模式”的设计模式,但我在任何地方都找不到对该模式的任何真正引用。它基本上只是一个单一方法接口,允许您轻松扩展后端的功能,而无需重新编译客户端。对于必须处理许多不同类型的请求的 Web 服务可能很有用。这是一个例子:
public interface IHandler
{
IDictionary<string, string> Handle(IDictionary<string, string> args);
}
args 通常会包含一个键,例如“Action”,其值告诉实现该做什么。可以传入额外的参数来为 impl 提供更多信息。然后 impl 传回客户端“应该”理解的任意参数列表。
这是一种反模式,还是另一种伪装的模式?是否推荐这种类型的设计?
编辑: 更多信息:按照我看到的实现方式,“根”处理程序将充当其他具体处理程序的调度程序(也许?)。根处理程序有一个“HandlerResolver”,它根据消息的内容决定哪个具体的处理程序应该获取消息。也许它实际上就像一个“调度程序”模式,虽然我也不知道这是否真的是一个模式。我猜它的根也可能有一个责任链模式,它允许你将一堆具体的处理程序链接在一起,然后让他们决定哪个处理它。
【问题讨论】:
-
处理程序模式将业务流程抽象为响应请求而执行的某些操作。当客户端不必知道处理程序的具体实现并且不能通过更显式的接口更好地表示操作时,这种抽象效果很好。 Javier 说它作为闭包的属性很有用也是正确的。它通常用于大型系统中以减少需要高扩展性的耦合。事件总线中使用的订阅者模式非常相似,但会为单个请求调用许多处理程序。
标签: c# .net design-patterns