关于activit6工作流与业务嵌合的设计思路

        现在所在的公司的一个项目原先使用的工作流节点全部写死,要做技术更新,框架选用了activiti。版本是6.0.0。

        其实在接触activit之前,完全不明白它是怎么和业务发生关系的,我需要做什么,它需要做什么,才能完成一个业务需求?摸不到头脑。

        在买了三本书《activiti权威指南》《activiti实战》《疯狂讲义之activiti6.0》并翻阅、查询了网上大量资料、实例之后,才对activiti6.0有了一个初步了解。原来,要使工作流和我们的自身业务发生关系,那是需要程序员去撮合的(噢大哥这tm的叫惊喜啊)。所谓撮合,不是把业务代码入侵到activiti中---解耦还是有必要的---而是说,把自己业务中可能会用到的工作流的应用场景做一个总结和抽离,再在这一层的基础上,写作调用的具体业务代码。也就是说,activiti好比骨架,纯业务层好比皮肤,那么联结和铺垫在他们之间的这一层就是肌肉。

        举个例子,我们的项目需求中有一条是:流转中要使用完全自定义的按钮名称、按钮数量,比如可以叫做“确认”,同样表示肯定意味的还有“同意”、“通过”、“确定”等等。这种东西不可能交给前端来实现,一个是因为前端一般不做业务逻辑处理,第二则是前端也根本没有办法控制这种逻辑,这种东西一定是需要和后端进行交互的,分离控制的话会非常复杂。

        如果是后端处理,我是这么设计的,如下图:

{
"buttonDefs":[
						{
						"businessType":"yes",
						"buttonName":"同意"
						},
						{
						"businessType":"no",
						"buttonName":"拒绝"
						},
						{
						"businessType":"bt1",
						"buttonName":"退货"
						},
						{
						"businessType":"bt2",
						"buttonName":"试用"
						}						
]
}

是的,这是一段json,可以还原为具体有层次的javabean,可以被读取。我管它叫做“按钮定义数组buttonDefs”,里面的每一个元素都是一个按钮定义,包括了按钮的名称,还有被按钮名称代表的参数名。这段json代表了我的设计,要和工作流发生关系,我把它放在了流程图定义的某个节点中。如下:

 这样,在查看用户任务的接口中,我可以通过某些方法将“按钮定义数组”从activiti中读取到,并与用户任务一起,返回给前端,形成一种准动态控制的用户按钮机制。如果我想,我还可以实现:改变按钮的颜色、按钮的条件式隐藏、特殊按钮的特殊业务代码触发等等,完全取决于后端流程图的定义与后端代码的写作。而用户点选了哪个按钮,则决定了按钮参数名称的取值,即流程接下来的走向。

        以上,就是一个小小的“肌肉”的例子,它不会被业务代码入侵,但是又能满足现有业务场景的调用,并且结合了activiti框架本身。

        其实这种结合,能做的还有很多,比如对用户评论comment的利用,可以实现每一个用户任务的上传附件、下载附件的管理;对业务要求指定节点的跳转;数据的一次性流程生成与先生成数据、再进行数据流程生成的分离式操作等等。

        总之,不要觉得使activiti与业务发生密切关系是不现实的,同样不要认为它能代替你实现任何业务场景。它只是一个满足了基本工作流转的框架而已,具体怎么使用,需要程序员去丰满,去实现。

        在这里,我再列举一下,个人认为在写作业务代码和使用activiti的过程中一定需要的基本“肌肉”:

1.自定义按钮的实现。上文有简述,不再赘述。

2.根据用户点选的条件找到下一个任务节点

3.找到上一个节点并驳回该节点

4.撤回已发出的流程节点

5.各种对业务流程的校验并提示用户

6.对回环业务中可能有的业务要求的实现,比如隐藏按钮

7.与启动业务流程的业务实体发生的各种可能的关系

8.切面化的业务代码,与“肌肉”解耦

以上,抛砖引玉尔。如果有任何工作流相关的问题,欢迎与我进行交流探讨,互通有无,谢谢。

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值