设为首页 加入收藏

TOP

asp.net强大后台:learun混合工作流框架规范
2018-11-22 12:08:18 】 浏览:23
Tags:asp.net 强大 后台 learun 混合 工作流 框架 规范

 

以前,我们对标准工作流进行过简单梳理,今天,我们再来看一下混合工作流。

了解混合工作流,我们必须要先分清角色、内容、流程之间的关系——即角色与内容是挂在流程节点上的功能点。在实际操作中,我们需要将流程节点控制好,再将不同的角色,以及对应的操作内容挂靠上去即可,这样一来是可以方便理清关系,另外也可以使系统更有层次。


 

控制好非标准流程节点,可以由以下几个方面着手。

1.如果流程配置者有配置SQL的能力,那么将数据库流程配置权限开放,让配置者自行配置,这样的开发工作压力会小一些。

2.画流程图的方式。一个流程的执行可以通过流程图来表现,对于产品经理来说是再熟悉不过了。通过流程图的基本逻辑,可以将流程中遇到的各种情况可视化的展示出来,条理清晰而且操作简单。缺点即开发难度过大,一般小团队难以胜任。

3.通过一一配置功能来进行配置,这种方式虽然表面上看起来十分的繁琐,但是相对于前两种来说开发难度小,且对于配置者的能力要求不高。

具体来说,要单独配置每一项功能的流程,先确定流程的主流程有几个节点,如果碰到判断的节点选择是,碰到并发流程或执行的节点选择最长的一个流程。确定之后,将所有节点的内容操作与角色配置出来,然后再配置该节点是否进行判断,是否进行或操作,是否进行与操作。

如果有判断操作时,则分出一个子流程,再将子流程按照上述方式进行配置,最终归于主流程的某一个节点。如果有与操作时,要确定配置与操作的分支节点时是要配置在单个节点还是多个节点。

单个节点的话则需满足这两个节点才往下进行,多个节点时则将这几个节点作为一个小流程单独按照上述方式进行配置再合并至主流程,看是否满足与行为。

如果有或操作判断时,同样要确定在哪个节点的或操作至哪个节点可以进行另外的节点流转。

以上这些情况对于开发团队来说也是一个巨大的考验,因为不同的工作流程代表着不同权限的操作,不同状态的流转,而可定制化的流程则代表着其中的变化无穷,对于服务器的压力,数据库的冗余情况都不容乐观。

那么,如何设计高效的混合工作流呢?


 

 

设计一个后台压力小,操作简单的高效混合工作流,可以有两种方式。

第一:将非标准工作流拆分成多个标准工作流。

第二:开辟独立与配置权限之外的工作流角色模块。

1. 将混合工作流拆分成多个标准工作流

一个非标准工作流固然麻烦,可是在大多数的情况下,其可以拆分为几个标准工作流。比如,某个非标准工作流可以线性拆分为多个分支流程,并发流程与执行、并发流程或执行。

将其每一个组合到一起,即可形成完整的工作流,那么我们就可以在系统中提供组合模板,让配置者可以进行选择,组合到一起形成一个非标准工作流。

如果是非线性的,比如可能为分支套分支,并发套并发的情况,我们可以将每一种情况都拆分成一个工作流,然后将生产端入口保持统一,每一步的不同操作可以进入不同的工作流,最终流转的出口保持一致即可。有点类似于开发中设计模式的工厂模式。

2. 开辟独立与配置权限之外的工作流角色模块

一般来说,我们在配置工作流角色的时候,都是使用类似权限控制的角色,比如到这个节点角色为库管,另一个节点角色为商管。其实换个角度想想,再说设计工作流的时候,完全可以设计一个独立于权限之外只配置工作流的角色。

比如“分支节点角色1号”“流程角色1号”“并发或角色2号”,然后再通过穷举法,将所需要用到的使用流程都列出来,把角色放置于节点上。

这样,一个活的需要配置的流程就变成了一个个的死流程。

再将这些角色赋予权限角色。再定义一些规则:比如若没有配置此节点的角色则此节点默认通过,将某个工作流角色配置两个权限角色则为或操作/与操作。这样也就解决了上述的问题。


 

工作流可以说是后台系统中比较复杂的一部分。即便某些系统中一开始没有工作流,随着系统功能的增加,也不可避免会用到工作流,所以提前了解下工作流的设计方法,对于产品来说很有帮助,在开始设计的阶段也可以考虑将内容设计进去以免后期维护成本过大。

 


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇编程测试计算机存储的大小端模式 下一篇一道面试题(C语言)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }