责任链[GoF]的缺点

Bob*_*ers 4 java design-patterns chain-of-responsibility

我们需要构建一个处理销售订单的解决方案.处理是连续完成的:每一步都要处理特定的任务:检查客户是否有信用,检查所需物品是否有库存等.

我们想到了使用责任链模式.

我发现这个旧的,但非常有价值的文章.它首先将CoR与模板模式进行比较.由于我们不关心耦合,它们似乎都有效.

我应该注意哪些缺点(或陷阱等)?

mik*_*era 8

它并不是一个很好的契合:责任链模式是关于委派早期步骤无法处理的任务.

在您的情况下,您希望应用每个步骤,因此CoR并不真正适用.

你真正想要的是某种业务流程引擎,jBPM.流程引擎旨在处理这种情况,并为您提供许多在手动解决方案中难以实现的功能,例如:

  • 具有持久存储到数据库的长时间运行的进程的能力.尝试调试丢失的订单并不是很有趣,因为你必须重新启动服务器....
  • 能够等待消息队列上的外部事件(例如,从远程系统获取确认).在某些简单的情况下可能不需要它,但如果您与外部供应商集成,它就变得至关重要.
  • 处理异常情况和处理回滚/补偿
  • 事件记录和报告

基本上,这是我建议不要重新发明轮子的情况之一.....