案例-怎样用 UML 设计一个简单的工作流引擎(含递归算法)?( 三 )
可以看到从stepsWithRouter中获取step和router,step执行返回stepState状态,router利用这个状态去控制后续流程。再说下Router的执行过程,见下图:
因为用到了递归,所以在这里用到了调用这个activity本身 Router:route,这里有个小疑问,这个action的名字中间的":",不知道表示的是啥意思?总结一下想问的问题:1、请老师帮忙指出doBuild方法中的逻辑表述不清楚的部分和错误?2、再就是画图的时候遇到几个错误,如图
这里总是“A merge node has one outgoing edge”,我这里明明画了一个指向下一个action的线。
这两个对象step和checkerForkFlowMapping分别表示上面的两个action的输出对象,因为针对它们的后续处理是一直的所以我用了个merge节点,这里的提示是“All edges coming into or going out of object nodes must be object flow edges”,不知是何原因。3、一个懂得UML的开发人员能否按照这些设计图编写出代码呢?============================第三版============================按照您指出的问题画了第三个版本,直接上图1、类图完整版
1)如果接口如IStep、IFlow等依赖了StepState,那么其实现类还要画一条表示依赖的线么?我的理解是接口依赖了那么实现类也一定依赖StepState,故之前没有画出实现类对StepState的依赖。2)如果实现类过多的话每个类也都要画出依赖关系么?2、活动图
1)补充了doBuild的出线2)将第二次获取并移除steps首项改为获取3)合并了SimpleRouter节点,但是该节点应该只有一个输入,不确定怎么表示第二种需要传入null的情况,故加了注释说明传入null,感觉不太准确。4)关于右侧的Map的处理实际上是将Map\u0026lt;String,List\u0026gt;转为了Map\u0026lt;IChecker, Flow\u0026gt;的map。5)整个doBuild过程却是只产生第一个Step及其Router,故改名为firstStepWithRouter3、Router.route的活动图修改
增加Router:route的出线,修改Activity Final Node 为 Flow Final Node ========================分割线===========================重新又捋了一遍,改正了上个版本的错误。
1)修改第一个判断节点的描述内容,此处的判断应该为是否还有下一步。2)修改执行currentStep为执行nextStep,此处确实应该是执行nextStep(前一步在Flow或上一次router调用中执行),则nextStep的执行结果变成了currentStepState,把这个当前结果传入到Router:route中currentStepState自然就成了preStepState,Router:route的输出结果是lastStepState因为是递归调用,最后一步是递归出口故返回lastStepState(即整个流程的执行结果)3)在Cheker选择分支节点后增加了判断节点,当没有找到匹配的流程时,默认的行为是返回preStepState。附上两种Router的代码,一言不合就发代码,嘿嘿!1、SimpleRouter
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 湖北通报扫黑除恶专项斗争典型案例办理情况
- 冬季煤气中毒案例多广东发出风险提醒
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?