1. 应对业务规则的变化
比如常见的员工请假流程:如果低于3天提交部门经理,如果多于3天以上,提交总经理审批。这就是一种流程。按照常规代码处理时:
if days < 3
submit to Department Manager
else if days >=3
submit to CEO
或许有人会问,既然我代码可用处理,为什么还要用工作流呢?
1). 主要考虑流程的变化因素不可控,比如,公司出来一项新的政策,说是5天以上总经理才去审批,这个时候,如果通过编码的方式就要改代码了,再重新发布,系统的可扩展性太差;
2). 假如有人说我不去把请假天数硬编码,我放在配置文件里面不就可以了吗?
的确是可以的,主要的好处不用重新发布程序。但是这样做,跟流程相关的规则还是零碎的,分散的,不是完整放在一起的。
3). 我们可以认为办法2)就是工作流的萌芽思想,我们将所有跟业务规则有关,任务办理人员有关,任务数据权限有关的信息全部整合的一个配置文件里(相当于流程定义或配置信息),然后在程序运行时,读取这个配置文件,判断流程的执行流转走向,最终结束。
<Condition type="Expression">
<ConditionText>
<![CDATA[
askDays < 3
]]>
</ConditionText>
</Condition>
if days < 3
submit to (Department Manager || HR Manager)
else if days >=3
submit to CEO
<Performers>
<Performer id="3c917748-6752-4bc6-aea8-b85d40521888"/>
<Performer id="8e54c07d-d424-4186-b86c-cec43019bed0"/>
</Performers>
3. 控制活动节点的数据权限
总结: