【发布时间】:2014-07-24 10:16:12
【问题描述】:
我正在尝试找出一种干净的 ruby/oo 方法来解决嵌套状态机的问题。
我正在为一个接受订单的系统建模。订单以状态机的形式实现,根据是住宅/商业、qc/no-qc、国外/国内,流量会发生各种变化。
我对设计这个的好方法一无所知。每个选项组合都有自己的工作流程的新类可以工作,但非常不干燥,并且可以通过其他选项快速分支。
我试图弄清楚是否有一种方法可以通过组合来构建它,其中订单将根据前面提到的住宅/商业/等在每个分支机构推迟/委托到其适当的子工作流程状态,然后完成后返回主订单流程。
我正在使用的工作流 gem 似乎没有办法做到这一点,而且我看过的其他状态机实现都不支持它。
是否有一种非常红宝石的方法可以让我根据内部状态进行委派?是否有一个通用的 OO 模式在这里可以很好地工作?我是不是以一种奇怪的方式接近这个问题?
【问题讨论】:
-
根据内部状态委托让我想到State Pattern。
-
很难说没有看到更多的问题。如果工作流之间的大多数差异是简单的做这个或不做这个决定,您也许可以编写少量的策略类来处理复杂的差异并将它们参数化以处理简单的选项。如果它更复杂,您可能希望在 DSL 中组合步骤,这是我以前在商业工作流软件中看到的。
标签: ruby oop design-patterns state-machine