1 长子:业务流
业务流程了解得比较多,这里就不废话了。举几个例子用做广告:) EOS工作流/jBPM/其他的BPEL产品 等,我的博客上写了不少其他的产品(blog.csdn.net/hongbo781202/)。业务流程可能横跨多个用户的多次对话,流程的状态被保存在数据库中,所以流程被认为是长时间运行的。
2 老二:无状态的页面流
无状态的页面流早已经存在,大家也都非常熟悉。就比如webwork框架等。无状态的页面流定义了一种映射,把事件的的逻辑结果用命名规则直接映射到视图的结果页面。新近的两个无状态的页面流是JSF和Seam框架。
JSF举例如下:
<navigation-rule>
<from-view-id>/numberGuess.jsp</from-view-id>
<navigation-case>
<from-outcome>guess</from-outcome>
<to-view-id>/numberGuess.jsp</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>win</from-outcome>
<to-view-id>/win.jsp</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>lose</from-outcome>
<to-view-id>/lose.jsp</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Seam举例如下:
<page view-id="/numberGuess.jsp">
<navigation>
<rule if-outcome="guess">
<redirect view-id="/numberGuess.jsp"/>
</rule>
<rule if-outcome="win">
<redirect view-id="/win.jsp"/>
</rule>
<rule if-outcome="lose">
<redirect view-id="/lose.jsp"/>
</rule>
</navigation>
</page>(说明:这两个example是从seam的userguide中抄过来的)。
3 老三:有状态的页面流
用过业务流程和无状态的页面流的同学大都有过心痒痒的感觉,是不是这两个东西可以合起来用啊?因为我以前一直是做业务流程的,所以我在05年就做过一套“自认为创世纪的东东”,其实就是把业务流程用到页面上来。后来终于有一天,知道了这个东西的名字是“页面流”,也知道那个“自认为创世纪的东东”早就在业界有了产品了。 我最早是用BEA workshop试验的页面流,当时挺撼动的,毕竟比自己捣鼓
的那个东东强多了。现在想来也就很一般的功能。
BEA的jpf毕竟不是标准,(应该不是吧?呵呵)为了推广市场,BEA的Beehive包含了一个jpf框架:Pollinate的NetUI。NetUI Page Flow(页面流)是一个基于Apache Sruts的Web应用程序框架,基于JSR-175元数据,它构建在模型/视图/控制器元素的核心Struts分离的基础之上。
如果说NetUI Page Flow更偏重于无状态的页面流(使用简单),那么Spring WebFlow更偏重于业务流程(功能强大)。Spring WebFlow以有限自动机(Finite State machine)的概念为基础。Web应用内部的用户交互行为和事务被建模为一般的状态机。
EOS的页面流更是同时吸收了BEA JPF的优点(eclipse插件方便用户开发)和Spring WebFlow的优点(功能全面),大家可以下载EOS6.0试试用用。
页面流领域给我最大振撼的还是是jBPM。(注意,我认为seam的页面流功能是jBPM的功劳,不是Seam自己的)。因为我05年做的那套“自认为创世纪的东东”,开始是想过要用这个思路的(我当时就已经用了好久的jBPM了),可惜当时我们团队掌握jBPM的人太少,没有用这个方案。
下面是一个使用jPDL定义页面流的例子(摘自Seam2.0 userguide):
<pageflow-definition name="numberGuess">
<start-page name="displayGuess" view-id="/numberGuess.jsp">
<redirect/>
<transition name="guess" to="evaluateGuess">
<action expression="#{numberGuess.guess}" />
</transition>
</start-page>
<decision name="evaluateGuess" expression="#{numberGuess.correctGuess}">
<transition name="true" to="win"/>
<transition name="false" to="evaluateRemainingGuesses"/>
</decision>
<decision name="evaluateRemainingGuesses" expression="#{numberGuess.lastGuess}">
<transition name="true" to="lose"/>
<transition name="false" to="displayGuess"/>
</decision>
<page name="win" view-id="/win.jsp">
<redirect/>
<end-conversation />
</page>
<page name="lose" view-id="/lose.jsp">
<redirect/>
<end-conversation />
</page>
</pageflow-definition>
用过jBPM的同学们,看到这个感觉怎么样?亲切吧?一个简单的页面流定义看起来跟业务流程定义非常相似(是同一种类型的东西),不同的是用 <page>节点替换了<task-node> 节点。
4.老四:逻辑流
逻辑流应该是EOS首创(应该是吧?),在EOS中他们是.bizx文件,基本上等同一个java 方法,内部可以调用服务/运算逻辑和另外一个逻辑流。
不要把这些个事情弄混了!逻辑流/页面流/业务流 它们运行在非常不同的层面或粒度中。逻辑流来自于一次与单一用户的单一交互; 页面流来自于与单一用户的多次同一上下文的交互;而业务流则横跨许多用户和交互。从另外一个角度看,他们三个是完全正交的,可以在一起使用或是分开单独使用,或者都不用。
分享到:
相关推荐
当Web应用程序采用了Struts框架后,在Web应用启动时,Struts框架会初始化并加载配置文件`struts-config.xml`。这个配置文件定义了整个应用的结构,包括各个Action、Form Bean以及它们之间的映射关系。初始化完成后,...
在IT行业中,SSH框架是Java Web开发中常用的三大框架整合,包括Spring、Struts和Hibernate。这个名为"本专生WEB网站SSH框架毕业设计学生选课系统实现"的项目,显然是一个针对高校学生的毕业设计课题,旨在利用SSH...
Intent注入则是针对Android系统的一种安全攻击手段,通过恶意篡改或插入Intent对象,攻击者可以控制应用流程,执行非授权操作,甚至可能导致敏感数据泄露或者系统崩溃。 1. **Intent的基本概念** Intent是一种轻量...
OAuth2.0是一种授权框架,允许第三方应用在用户授权的情况下获取访问特定资源的权限。流程主要包括以下几个步骤: 1. 请求授权码(code):第三方App通过调用微信SDK中的`SendAuth.Req`类发送请求,指定授权范围...
EDA系统框架提供了一个标准化的环境,使得不同工具和软件包可以协同工作,如Cadence的OpenAccess等,极大地提升了设计流程的协调性和一致性。 4. 未来展望: - 随着摩尔定律的放缓,EDA技术将继续创新以应对更小...
标题中的“一个Java框架引发的思考:语言、框架、范式转换和软件生产力”提示了本文将探讨一个特定的Java框架,并...通过深入理解语言、框架和编程范式,开发者可以更好地选择工具,优化开发流程,提高软件质量与效率。
总结来说,"应用管理Demo"是一个涵盖了数据存储(NSDictionary)、UI设计(九宫格布局)和基本应用管理功能的示例项目,对于初学者理解iOS应用的开发流程和关键技术点有着很好的指导作用。通过深入研究这个Demo,...
总的来说,"高焕堂Android应用软件架构设计"这个主题涵盖了Android开发中的核心概念和技术,对于希望提升应用质量、优化开发流程的开发者来说,是一个非常值得学习的资源。通过深入理解并实践这些知识,开发者可以...
一个软件框架是用于组织应用程序结构和流程的代码基础。使用PySide6构建框架可以遵循MVC(模型-视图-控制器)或MVVM(模型-视图-ViewModel)架构: - **模型(Model)**:负责数据的存储和处理,与业务逻辑相关。 -...
Spring IOC 容器的启动流程是整个 Spring 框架的核心所在,本文将从 AbstractApplicationContext 的 refresh 方法开始,详细分析 Spring IOC 容器的启动流程。 在 Spring 框架中,ApplicationContext 是 IOC 容器的...
在软件开发过程中,软件测试是不可或缺的一环,它确保了产品的质量和稳定性。本文将深入探讨软件测试技术,...通过深入理解和熟练运用这些测试流程、方法和工具,可以有效提高软件质量,降低风险,确保产品的成功交付。
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。这个框架是Spring生态系统的一部分,旨在简化MVC(Model-View-Controller)开发模式的实现,提供了一种组织和处理HTTP...
在IT行业中,框架是软件开发的重要工具,它为开发者提供了标准化的开发流程,降低了项目的复杂性。本文将以"框架写的简单学生管理系统"为例,深入探讨如何利用SpringMVC和Mybatis这两个主流的企业级框架来构建一个...
在前端开发领域,MVVM模式已经成为构建现代Web应用的重要技术,它极大地提高了开发效率和代码可维护性。 首先,让我们深入了解一下MVVM模式。MVVM是Model-View-ViewModel的缩写,是一种软件设计模式,常用于Web应用...
AngularJS是由Google维护的一个JavaScript框架,用于构建单页应用程序(SPA)。它通过数据绑定和依赖注入来简化开发,允许开发者以声明式方式处理DOM操作。AngularJS的核心概念包括: 1. 双向数据绑定:这使得视图...
《基于SSM+Vue框架的二手房中介管理系统》 在当今数字化时代,二手房中介管理系统已经成为房产行业不可或缺的一部分。本文将深入探讨一个基于SSM(Spring、SpringMVC、MyBatis)后端框架与Vue.js前端框架相结合的...
J2EE框架是Java企业版的核心框架,包括Spring、Struts、Ibatis、Hibernate等,各有其优缺点和应用场景。Spring是一个轻量级的框架,适用于大型企业应用;Struts是一个基于MVC模式的框架,适用于Web应用;Ibatis是一...
Scrapy则是一个完整的框架,包括网络请求、数据解析、中间件处理等功能,适合构建大规模的爬虫项目;Requests库则负责发送HTTP请求,获取网页内容,它是许多爬虫的基础。通过学习Python爬虫,你可以获取并分析大量的...
DevExpress是一个知名的.NET框架提供商,其产品广泛用于Windows和Web应用程序的快速开发。在本教程中,我们将详细介绍如何利用DevExpress XAF版本实现工作流设计,从而帮助开发者构建出业务流程更为复杂的应用程序。...