zoukankan      html  css  js  c++  java
  • 用子流程来分解大流程续

    年前写过一篇,用子流程来分解大流程。当业务流程处理环节多,繁杂时,可以用子流程来分解。就像我们程序员最熟悉的子函数一样,把处理同一事项的归纳成一个子函数,子函数可以在多个场景多次调用,也可以在同一场景中反复调用。

    用子流程来分解大流程,作用和子函数类似。将功能处理过程比较独立或者单一的归纳成一个子流程。子流程本身是一个完整的处理过程,可以单独启动执行,也可以嵌入到其它流程中使用。

    单独启动执行:这种就是常见的业务流程的使用。

    嵌入其它流程中被调用:和主流程就会有千丝万缕的关联了。
    分析一下,主要体现在,传入传回参数,同步异步的运行。和子函数不同的还有,主流程实例和子流程实例之间的对应关系。

    传入参数:主流程送给子流程的参数,和子函数的调用参数一样理解。
    传回参数:子流程运行结束,返回给主流程的,和子函数的返回值一样理解。

    同步:主流程运行到子流程,启动了子流程了,需要等待子流程运行结束,返回主流程,主流程再接下去执行。和子函数的同步调用一样。
    异步:主流程运行到子流程节点,启动了子流程了,不需要等待子流程运行结束,立即就返回了主流程了,接着主流程往下执行。 和异步调用子函数类似。

    主流程实例和子流程实例,一对多的关系:主流程实例运行到子流程时,启动一个子流程实例。当主流程因为循环,返回,自由跳转等等返回到子流程节点之前,再次运行时,会再次启动子流程实例,这时候是又生成了一个新的子流程实例了。 主流程实例只有一个,形成了主子流程实例,一对多的关联关系。

    主流程实例和子流程实例,一对一的关联:主流程实例运行到子流程实例时候,启动一个子流程实例。当主流程由于多种原因返回到子流程节点之前,需要再次启动子流程实例时,
     当子流程实例未运行结束时候,则不产生新的子流程实例,继续原来的子流程实例的运行。
     当子流程实例已经运行结束了,则将子流程实例再次激活,并回退到开始节点,重新运行。
     
    总之,使得主子流程实例 始终是 一一对应的关系。即当已经产生了一个子流程实例后,就不会再产生新的子流程实例。


    子流程的运用场景:
    1、将功能单一的业务流程嵌入到大的业务流程中。可以在多个业务流程中被调用,也可以同一个业务流程中多次被调用。
     如整个采购系统中的 退货流程,退货流程本身是规范的,没有歧义的,按照退货办理顺序流转。可以主动发起退货流程,也可以嵌入到采购流程中,库房管理流程中,销售流程中。。。。。
     
    2、分解大的业务流程:
     通常很多企业上工作流系统,是因为业务流程繁杂,环节多,步骤又多变,便于流程化管理和后期的维护,才会选择工作流管理系统。当一个页面都显示不下一个业务处理过程的节点时,很自然的就会考虑用子流程来分解大的业务流程,使得界面更加清晰流畅,而事实上,那么大的业务流程肯定是可以分类的,用子流程来分解是最好的方法。
     
     但是,用子流程只是为了分解大的业务流程的话,主子流程实例就必须是一对一的关联。如主流程实例运行到子流程后,启动了子流程,返回主流程,主流程因为各种原因,返回了,再次运行到子流程时,应该是重做子流程的业务,而不是再次启动一个新的子流程。因此主子流程的衔接需要这样一个开关来决定是一一对应的还是一对多的关联。

  • 相关阅读:
    signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);
    关于pthread_cond_wait使用while循环判断的理解
    linux的sleep()和usleep()的使用和区别
    C中结构体的存储分配
    扯扯python的多线程的同步锁 Lock RLock Semaphore Event Condition
    线程属性的初始化以及销毁
    Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
    sqlyog 注册码
    Oracle 12C卸载图文教程
    Oracle12c Release1安装图解(详解)
  • 原文地址:https://www.cnblogs.com/webreport/p/2336868.html
Copyright © 2011-2022 走看看