http://www.cnblogs.com/foundation/archive/2006/09/26/515025.html
流模式(Sequential)
1.适合一个比效机械化的流程
2.在这种流程中,参与者处于一种被动的局面,他必须沿设定的路线一步一步完成。
例1:在MIS系统中,一个操作机器的工作流:
(开使->关1闸 –> 关2闸 -> 修理 -> 开2闸-> 开1闸 -> 结束)
在这个工作流中,需要严格按流程操作。而且在[修理]结点处可能还要调用一个修理某类设备的工作流。
例2:比如一个购物的工作流:
(开使->浏览->选择->缴费->取货 -> 结束)
在该例中,流程序顺的严格性就显得不是很重要,比如[缴费]与[取货]结点谁先谁后就不是很重要,只要[缴费]与[取货]都完成了就可以结正常[结束]该流程。
对于像这样的业务需求,就可以使用状态机模式
流模式的执行并非完全是顺序的。它们仍然可以接收外部事件或者启动并行任务,在这种情况下,可能会有状态机模式的表现形式。但就其设计与维护方式来说仍是 流模式
状态机模式(State Machine )
在状态机模式下,参与者的自主性比效大,工作流更多的是一个提醒的作用
例:一个审批流程:有六个部门批准才能通过,这六个部门的审批行为是独立进行的,不受其他部门结果的影响,可以使用状态机模式,配合规则实现
A.六个部门审批行为是并行模式
B.规则可以使用:全票通过,一票通过,简单多数,绝对多数,额定通过,等
另外状态可以由一种进入到另一种,如上例出现平票状态后,将进入联合听证流程
如何选择工作流模式
一个简单的判断标准
影响工作流程的一些重要的选择是否发生在工作流外部?是否由用户进行控制?
如果是,那就不适合采用流模式。而最好选用状态机模式
因为流模式本质上是对工作流的路径建模,将路径信息都编码到了模型之中。但是在某些时候,业务并不关心路径,而只关心结果,并且不关心结果是如何实现的。
这时要用流模式,就需要画出许多复杂的路径流程,但是这些复杂的路径却并非我们所关注的问题。而最后往往是维护路径的付出远远大于维护业务模块。
实际设计中的模式:
在实际设计中,模式的应用并不是泾渭分明的。同一工作流,在不同参与者的眼中就有不同的模式。
如一个请假的工作流,参与都有两种:申请人、审批人
在申请人眼里,他所参与的工作流是[流模式]
在审批人眼里,他所参与的工作流是[状态机模式]
以上是本人在开发各类工作流中的一些心得。在WWF中可能也会有一定的适用性
分享到:
相关推荐
所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...
过滤流(FilterStream)是Java I/O中的一种设计模式,它们在已存在的流之上添加额外功能。例如,DataInputStream和DataOutputStream扩展了字节流,增加了对基本类型数据的读写支持;而BufferedInputStream和...
6. **响应式编程**:ThinkAndroid也支持RxJava或Kotlin的Coroutines,这两种技术可以实现异步编程,让开发者能够以更优雅的方式处理事件流和并发问题。 7. **测试支持**:为了保证代码质量,ThinkAndroid提供了单元...
资本推动了产业创新和人力资源利用率的突破,互联网平台的出现改变了招聘市场格局,扁平化信息流促进了人才与工作机会的快速匹配,降低了招聘成本,间接成为人才流动的催化剂。 报告强调,健康的人才流动对企业和...
2. **Automation Anywhere控制台介绍**:学习者将了解到如何在A2019 SaaS控制台中创建、编辑和管理任务、工作流和智能服务,以及如何配置和调度自动化任务。 3. **RPA任务开发**:涵盖如何设计和构建RPA流程,包括...
【Java】在Java部分,面试可能涵盖基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、JVM内存模型以及设计模式等方面。例如,可能会问到如何优化代码性能,如何处理并发问题,或者对Java 8的新特性如...
2. Enterprise A2019简介:介绍该平台的界面、工作流设计工具以及主要功能,包括录制、编辑、调试和部署自动化任务。 3. 模拟按键操作的原理:解释如何通过RPA软件模拟键盘输入,包括使用系统API、模拟事件以及键盘...
图3展示了一个典型的晶体振荡电路,该电路采用并联谐振模式的晶体。电路中,反相器扮演AB类放大器的角色,提供180度相位转换。派型网络(R1、C1、C2)额外贡献180度相位,使得整个环路实现360度相位闭合,这是持续...
2. **异步加载**: 异步加载是指在主线程之外的线程(如工作线程)执行耗时操作,以避免阻塞用户界面。在Android中,一般使用AsyncTask、Handler、Thread、Runnable或现代的LiveData、Coroutines等工具来实现。 3. *...
这种设计模式可以节省空间,使复杂的界面保持整洁,并帮助用户更快地定位所需信息。 这款"tab页小插件"可能包含以下关键特性: 1. **样式自定义**:如同EasyUI,它可能允许开发者通过CSS样式表进行高度定制,以...
通过《2011 SQL笔试题》这样的练习材料,学习者可以测试并提升自己在SQL查询、数据操作、数据库设计和管理等方面的技能,为实际工作或面试做好充分准备。对于新手来说,这是一个极好的学习资源,可以帮助他们快速...
《自己动手写一个Spring》这篇文章主要探讨了Spring框架的核心概念,并通过模拟其实现来帮助读者深入理解其工作原理。Spring是Java开发中最流行的框架之一,它以依赖注入(Dependency Injection,DI)和面向切面编程...
在比较过程中,选择高级模式,并将.NET网表文件和PCB文件相关联。 最后,进行同步更新操作。在Altium Designer(AD)中执行工程订单(ECO),选择将网表中的所有更改同步更新到PCB文档。如果操作无误,接下来就可以...
在现代前端开发中,Vue.js已经成为了一种十分流行的JavaScript框架。而Vue Router作为Vue.js的官方路由管理器,使得我们在开发...同时,如果本文的内容能够对你有所帮助,请不吝转载,并注明出处,感谢对本网站的支持。
Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、设计模式、JVM优化、数据库操作等。以下是一些Java面试中常被问到的知识点...
【Struts2】是基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织应用程序的方式,将业务逻辑、数据展示和用户界面分离,以提高代码的可维护性和可扩展性。Struts2通过拦截器来处理请求,...
这种模式遵循了发布/订阅设计模式,使得数据流的处理更加灵活和解耦。 在 Android 开发中,RxJava 提供了一种替代传统回调方法的机制。传统的异步操作,如网络请求或文件读写,通常涉及多层嵌套的回调,这被称为"回...
提供了关于模块引脚分配、描述、工作模式、省电模式(PSM)、电源设计、开机/关机流程、复位模块、串口配置、USIM接口、模数转换接口、RI信号和网络状态指示的具体信息。 5. 天线接口: 手册为射频天线的设计提供...
10. **版权和出处**:描述中提到转载请声明出处,这是对原创工作的尊重,符合开源社区的规范。 综上所述,"抽奖软件java"项目是一个综合性的学习资源,涵盖了Java编程的多个方面,对于初学者来说,这是一个很好的...