同步两个状态机

时间:2009-06-09 04:49:25

标签: design-patterns state-machine

说,我正在构建业务流程管理应用程序。它具有以下实体:问题和任务,彼此相关,作为许多任务的1个问题。任务和问题都有自己的状态,一个状态可能影响另一个状态。

例如,它们都有“已取消”和“已完成”状态。当我将问题的状态更改为“已取消”时,其所有任务都应变为“已取消”。当我将所有任务的状态更改为“已完成”时,问题应自动变为“已完成”。

假设两个实体都存在相当多的状态,并且从一个状态到另一个状态的转换逻辑以及状态的依赖性可能会发生变化,是否有任何设计模式和/或最佳实践来处理这种情况?

2 个答案:

答案 0 :(得分:2)

跳跃到脑海的设计模式是一个“规则”; - )

或者,如果您愿意,还可以使用命令模式

换句话说,对于这样的情况,我会创建一个列出状态和可接受转换的数据库表,并将操作与每个转换相关联(使用反射)

我发现这对于处理转换操作比仅更新匹配状态更复杂的情况很有用。

例如,在一个系统中,我们有一个工作流程,其中请求文档必须通过多个委员会审核站,每个审核站都可以拒绝或将文档传递到下一个阶段,以及自定义副作用处理。委员会组织,处理结构和处理操作在开发期间发生了三次,在部署的第一年中发生了三次变化。

答案 1 :(得分:2)

我更喜欢这种事物的观察者模式:http://en.wikipedia.org/wiki/Observer_pattern在你给出的例子中,我有任务观察他们的问题并且问题观察他们的任务。当问题被标记为已取消时,任务会看到并标记自己已取消。当任务标记为已完成时,问题会看到并检查其他任务是否已完成,等等。