发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 下一页 Go 2

工作流状态机里的状态复用

         
2007-04-24 14:51
赞助商链接

目前比较流行的方法是,抽象出很多子业务流状态机,根据整个业务应用,选择部分子业务流状态机,组成复合业务状态机,以实现各种业务功能。

我的疑问是,能不能在状态层面进行复用呢,有没有人实现过这样的模型:针对业务抽象出A、B、C等等很多状态,在实现工作流状态机时,从之前抽象好的状态中选择一部分状态就可以快速组成各种工作流程控制。

谢谢!

2007-04-24 15:04

一直以来,我都有一个疑惑:状态和流程是一个什么样的关系?

有一种观点是,状态是属于流程的一部分,即状态离开了流程就什么都不是。如果是这样,流程状态机中,状态层面的复用就没有意义。

但以我的项目经验来看,状态并不一定属于流程,状态可能只是当时一种“状态”的体现,比如在工业控制中,状态可能是硬件的某种整体状况,它不属某一个流程,各种不同的流程都会有产生这种状态的可能。如果是这样,状态层面的状态复用就变得有意义了。

望大家赐教!

2007-04-24 16:14

>能不能在状态层面进行复用呢,有没有人实现过这样的模型
状态模式 和工作流其实都是在状态这个层面抽象重用,不知是否是这个意思

2007-04-24 21:44

举个例子来说明我的问题。

在一个游戏中,有角色A、B、C,其中角色A有9个状态,分别为A1-A9;角色B有4个状态,分别为B1-B4;角色C有5个状态,分别为C1-C5。
游戏中有各种各样的任务,每个任务需要的角色各不相同,假设有任务T1,需要角色A、B、C共同完成,但在该任务中,角色A只可能出现状态1、状态3、状态5,角色B只可能出现状态B1、B3,角色C只可能出现状态2、状态4;任务T2只需要角色A、C,角色A的状态只可能是A5-A9,角色C的状态只可能是C3-C5。

我的意思是,根据以上的例子,在每个任务中,各个角色可能出现的状态各不相同,如果能抽象角色A所有的状态,且定义好角色A各个状态的迁移规则(B、C也如此),那么根据不同的任务(可理解为业务流程),选择不同的状态,快速组成该业务流程的状态机控制。

在这个思路中,角色的状态是不从属于某个流程的,根据流程的规则选择角色及角色的状态,即可快速搭建业务流程状态机控制。请问,这个思路是否可行?有何利弊?

如果按照角色的状态是从属于业务流程的思想,以上例子中角色A的状态在各个任务中都不相同,这样一来,每新增一个任务,各个角色的状态都要新增很多?我的理解是否存在误区?

谢谢!

2007-04-25 10:12

>角色的状态是不从属于某个流程的
状态模式就是将状态从流程中隔离分离出去,状态机里面封装当前状态或转换到下一个状态的规则,相当于一个黑盒子,或者集成芯片,有输入信号和输出信号.

输入信号就是:当前事件,这个事件由哪个角色发出的,是什么事件.这里引入事件Event概念很重要,因为万事万物状态不会自动改变,一定有来自外界的能量事件触发,在软件系统中,事件可能源自于系统用户在终端的按键或鼠标,也可能来自系统内部的任务.

输出信号是:在该事件作用下,改变后的当前状态.

2Go 1 2 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com