6

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

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

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

4

2 回答 2

2

想到的设计模式是“规则”;-)

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

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

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

例如,在一个系统中,我们有一个工作流程,其中请求文件必须通过几个委员会审查站,每个审查站都可以拒绝或将文件传递到下一阶段,加上自定义的副作用处理。委员会的组织、处理结构和处理动作在开发过程中发生了 3 次重大变化,在部署的第一年又发生了 5 次变化。

于 2009-06-09T04:55:19.507 回答
2

对于这类事情,我更喜欢观察者模式:http ://en.wikipedia.org/wiki/Observer_pattern在你给出的例子中,我会让任务观察他们的问题,而问题观察他们的任务。当一个问题被标记为已取消时,任务会看到并将自己标记为已取消。当一项任务被标记为已完成时,问题会看到它并检查其他任务是否已完成等。

于 2009-06-09T04:56:45.933 回答