也许是流程做多了的缘故,所以看起程序开发来一切都是流程或者说都包含流程。个人认为大多数的企业应用(不包括特殊应用,例如文档库、信息资源库、BBS等 等)不过是对数据以一定的样式展现(表单),以一定的逻辑对数据进行操作(业务规则),以及把这些处理数据的过程以一定的流程进行管理(流程)。上面三个 方面分别对应着表单、业务规则和流程。程序开发中则对应于表单引擎、规则引擎和工作流引擎。而这些方面又可以统一到一个更大范畴的流程上来,所以这里有对 流程驱动开发的设想。
先来看看具体的应用场景。
单表增删改查
这是最简单的情形,也没有流程,对这个情形不加讨论。但是这里会提到表单引擎,VB里的数据控件非常的易用,没有PO,没有DAO,也没有Service,直接与数据库字段进行绑定。我们的表单引擎也可以采用这种方式。
支持表单控件(输入框、文本框、下拉框等)的拖拽,将整个表单与数据库表绑定。
表单控件与数据库字段的绑定。
单表业务+流程
比上面的情况稍微复杂一点点,也就是要在业务里引入流程,其实这也是现在工作流引擎应用最多的地方,比如说政府OA里的收文、发文。
这里只需要将表单与流程进行绑定,表单引擎的处理方式不变,依然是直接与数据库表进行绑定。表单负责对数据库里的业务数据进行展现,工作流则负责推动这些数据在业务意义上状态的转换,互不影响,并在需要的时候在自动节点上对这些数据进行相应的业务处理。
关 于表单权限。这个也是表单与工作流进行绑定时所必须考虑到的问题。其实只是需要在表单引擎里引入权限角色的概念,每个角色对应于一种权限,这种权限具体说 来就是表单里每个字段的可见、可编辑等等。然后在人工节点定义时指定表单权限角色即可。这样也实现了流程与表单权限一定程度上的解耦。
其实还有一种更方便的方式,将表单直接与人工节点进行绑定,每个人工节点对应于不同的表单。
复杂一点,多表关联的情况
复杂一点的情况是业务往往是多表的关联。这需要对表单引擎做出扩展,让它可以根据关联字段对关联表做出查询,得到关联表的设计结构,继续映射。这让我想起了ORM,这里很有FRM的意思在里面。其实对于常用的关联查询往往有通用的组件可用,例如根据userid渲染出用户名,根据数据字典的id关联渲染出相应的值,oa里的正文、附件、印章等等。
流程跨越多个业务
流程需要跨越多个业务,一个典型的流程如下:
会 议审批会涉及到两张业务表:会议室使用表,会议记录表。在会议申请和领导审批节点,最终用户打开的都是会议申请的表单,对应于会议记录表,对该表进行操 作。但是流程运行到会议室管理员安排会议室的节点,该节点最终用户不仅需要看到会议申请的表单同时还要看到会议室使用情况的表单,如果有空闲的会议室,用 户登记操作会议室使用表,然后通知申请者;如果没有空闲的会议室,则不用登记直接通知申请者。这个过程中跨越了两个业务,分别是会议室管理和会议管理。表 单在各个节点也是不同的。
这其实对工作流引擎提出了比较高的要求。例如如果流程已经结束,会议得到批准,但申请者突然有事要改变会议时间怎么办?回退。这里的回退无疑就需要有业务的补偿,例如要删除会议室的相关记录。
应用集成
一个流程不仅会跨越多个业务,也会跨越多个系统。这里的应用场景很多,重要的是要去其他系统抓取数据和操作数据,仅仅靠数据库表对表单的映射满足不了需求。
对工作流引擎做出改进,与前面相比,需要由引擎来完成对其他系统服务的调用。这里一个很重要的载体就是XML。首先要定义交换数据所用的XML scheme,然后将这个XML scheme再与表单引擎做出映射。实际执行时,工作流的自动节点会在人工节点前调用其他系统的服务,按照XML scheme将数据转换为符合定义的XML,在紧接着的人工节点送给表单引擎,表单引擎渲染。修改数据也是同样的过程,表单引擎将处理后的数据以XML返回,工作流再次做出转换,调用服务的修改功能。
上面五种都是比较常见的应用场景,理想的情况下,开发方式应该是这样的:画出应用流程->定义流程表单->表单与数据库进行映射->对流程进行业务仿真->完成开发。问题是这样的:你的表单引擎是否足够强大?表单与后台是直接用SQL进行交互的,也就是Transaction Script模式,没有业务对象,对于复杂业务逻辑如何处理?如何使用规则引擎来解决业务逻辑的问题?权限如何以一种AOP的方式对数据操作进行横切?
呵呵,纯属个人YY。
分享到:
相关推荐
5. **事件驱动编程**:语音助手通常会监听用户的语音输入,因此可能采用了事件驱动编程模型,当检测到用户的声音时,触发相应的处理流程。 6. **多线程处理**:考虑到语音识别和处理可能需要时间,项目可能使用多...
YY协议是基于TCP/IP协议栈的上层应用协议,它定义了客户端与服务器之间的数据交换格式和交互流程。这些协议通常包括登录、注册、发送消息、接收消息、创建或加入频道等一系列操作。通过解析和构建这些协议的数据包,...
至于模拟点击,登录器可能使用E语言的事件驱动模型来触发页面上的登录按钮,完成登录流程。 在实际使用中,用户可能需要配置多个YY账号,登录器会根据配置文件或用户输入逐个进行登录操作。为了保证安全性,登录器...
21世纪以来,人类对海洋资源的开发和利用愈发重视,尤其是海水中的水资源、化学资源和生物资源。 首先,海水中的水资源主要通过海水淡化来获取。淡化方法主要包括蒸馏、反渗透等技术。蒸馏原理是通过加热海水,使水...
在IT行业中,串口调试是电子设备开发与通信系统中不可或缺的一部分,特别是在嵌入式系统领域。本主题聚焦于“yy摄像头串口调试...在实际操作中,需要对硬件、软件和通信协议有深入理解,以便有效地调试和优化系统性能。
【驱动笔试题-V1.11】主要涵盖了Linux操作系统、驱动开发、系统调用和设备管理等知识领域。以下是对这些知识点的详细说明: 1. **Linux设备分类**: - 字符设备:提供顺序访问的数据流,如键盘、串口。 - 块设备...
【驱动综合能力面试】主要考察的是候选人在Android系统下的驱动开发和调试技能,以及相关硬件交互的经验。在面试中,面试官可能会询问以下关键知识点: 1. **驱动调试经验**: - TP(触摸屏)驱动:理解触摸事件的...
【标题】"buildroot-5.10 gt928驱动"所指的是一套针对Linux系统的构建工具Buildroot的特定版本(5.10),其中包含了GT928驱动...对于嵌入式开发人员来说,这简化了他们在目标平台上开发和调试触摸屏驱动的工作流程。
通过对这些代码的阅读和调试,你可以提升自己的编程技巧,同时也能理解游戏开发的基本流程。 总的来说,"YY.rar_游戏代码"这个压缩包为学习者提供了一个丰富的实践平台,通过这些实例,你不仅可以巩固C++编程知识,...
- 测试驱动开发(TDD)和行为驱动开发(BDD):确保代码质量。 - 自组织团队:鼓励团队自我管理和决策。 3. 华为敏捷开发实施策略: - 管理层理解和支持:PM及以上管理者需深入理解敏捷理念,并通过考试。 - ...
通过对成功案例的研究,可以更直观地理解优秀产品设计流程的应用实践: #### 4.1 案例一:XX应用 - **背景**: 针对特定用户群体提供便捷服务的应用程序。 - **流程**: 从初步市场调研到最终上线运营,详细展示了...
C++Builder是Borland公司(现为Embarcadero Technologies)推出的一款基于C++语言的开发工具,它将C++的面向对象特性与Visual Component Library (VCL)框架相结合,提供了直观的可视化界面设计和强大的事件驱动编程...
通过研究这个源码,开发者不仅可以学习到易语言的基本用法,还能了解网络应用开发的基本流程,对于初学者来说是一份很好的学习材料。同时,对于有经验的开发者,这也提供了一个实际案例,展示如何用易语言实现复杂...
JavaScript的事件驱动模型使得程序能及时响应用户的每一步操作,确保游戏流程的流畅性。 再者,`css`目录中的CSS文件则负责整个应用的样式设计,包括棋盘的布局、棋子的样式、界面的色彩搭配等。CSS3引入了许多新的...
这个“易语言-易语言编写的YY多开器”源码是一个利用易语言开发的软件,主要用于开启多个YY客户端,实现多账号同时在线的功能。在分析这个源码前,我们需要对易语言的基础知识有一定的了解。 1. **易语言基础概念**...
5. QSEE/TrustZone:这是bootloader的第五阶段,负责设置安全运行环境,配置xPU,支持fuse驱动程序,并认证任何子系统镜像。 Bootloader的不同阶段 bootloader的启动过程可以分为多个阶段,每个阶段都有其特定的...
在Android应用开发中,效率是开发者们关注的重要因素。为了提升开发速度,各种辅助工具应运而生。...通过将它们融入到开发流程中,可以显著提高工作效率,让开发者有更多的时间去关注应用的核心功能和创新。
易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语句,降低了编程的门槛,使得更多非计算机专业的人也能轻松学习编程。...这是一个很好的实践案例,对于提升编程技能和理解实际应用开发流程大有裨益。
通过学习和分析这个“YY安全中心登录例子”,你可以深入了解易语言在网络编程的应用,以及如何处理登录请求和响应,这对于开发其他网络应用程序是非常有帮助的。同时,这也是一个很好的实践案例,可以帮助你掌握网络...
【Linux编程基础】是IT领域的基础知识之一,涵盖了多个关键领域,包括C语言的使用、Shell脚本编写、Linux进程开发、串口编程、Socket编程以及Linux驱动开发。 **C语言的回顾** C语言是由贝尔实验室的Dennis Ritchie...