【发布时间】:2015-01-08 12:21:34
【问题描述】:
这里我将不再提及责任链 (CoR) 模式定义。但是我想知道的是,如果链中有一系列处理程序,并且如果一个请求由所有处理程序处理,并且如果开始处理程序失败,最后一个处理程序将不会处理该请求,是否违反模式?
我会用一个例子来解释。假设有一个允许用户搜索书籍的在线应用程序。当用户提交请求时,系统会进行搜索并显示结果。假设,此功能以 CoR 模式实现。
第一个处理程序获取请求参数(书籍类别、价格、作者等),并添加其他参数(例如从请求中挑选的用户国家、地区、语言)并进行某些验证。
第二个处理程序获取第一个处理程序的输出并查看数据库并创建结果列表。这些结果被传输到第三个处理程序。第三个处理程序将对结果进行排序、过滤、更改语言。如果前面的任何处理程序失败,则后面的处理程序将无法完成其工作。
使用 CoR 是否违背了它的概念?或任何其他好的模式?
【问题讨论】:
-
这听起来像pipe-and-filter,而不是责任链。如果设计符合您的需要,请不要担心“违反” CoR。模式是解决问题的工具;你不应该改变你的问题以适应工具。 CoR的problem:
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.
标签: java design-patterns