博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WF 学习笔记 (1) - 浅谈 WF 和 MVC 架构
阅读量:4959 次
发布时间:2019-06-12

本文共 1750 字,大约阅读时间需要 5 分钟。

WF 的 F (Foundation) 为「基础」的意思,也等于宣告了 Windows Workflow Foundation,是微软未来程序开发中,必然会被持续使用的一种关键技术;也因为它是一种基础,所以能自然地和 WPF、WCF、ASP.NET 整合,例如本帖提供的下载示例,即用 WF 来控管 ASP.NET 页面的流程。

WF 和 MVC 架构

这里谈的 MVC (Model-View-Controller),不是单指微软近年在研发的 ASP.NET MVC Framework,而是指 Java / JSP / Struts 已行之有年的一种 Web 开发分层架构和观念。过去 ASP.NET 的开发方式,由于有微软独家的 Code-Behind 技术,将 UI 和控制逻辑做出有效的区隔,因此得到许多程序员的喜爱。但从前两年开始,由于 AJAX 技术的流行,却又把已经泾渭分明的架构弄得凌乱不堪。由于 AJAX 随时可用异步的方式,去自行触发事件,因此把原本统一由 Page_Load 事件,作为入口的规范给弄乱了。

但在 Web 开发上,若能将 WF 对流程控制的能力加入 ASP.NET 里,肯定能获得等同于 MVC 的效用。请参考本帖下载示例及图 1,当用户单击任一个 Button 时,EventDrivenActivity 就会调用事先指定好的事件处理程序,直接将主导权交给 Workflow Engine,无须再做任何处理。如此一来,就能适度地将程序逻辑和 UI 做出区隔,等同用 WF 达成 MVC 中 Controller 的角色。

2009030102303162.jpg

图 1 本帖的示例,用 StateMachine 工作流,在 ASP.NET 上模拟 Workflow 的进度状态

在 MVC 的设计中,View 之间的页面转换,不是像 Code-Behind 这样把代码写死,而是必须能达到事后易于调整,而 WF 即能扮演此种角色。当某个页面完成处理时,透过事件传入 Workflow 去控制相关的动作、页面的转换;只要调整 WF 的流程,就能随时重新定义页面的转换和显示顺序,赋予开发上更大的弹性,并能在既有的流程中,随时再加入新页面或功能。若程序员能搭配一些 Design Patterns,或搭配 WCF,还能让 WF 的威力更加强大。

-------------------------------------------------

本帖的示例下载点:

(执行本示例,需要 VS 2008 或 IIS,不需要数据库)

-------------------------------------------------

示例中是一个提供会员申请续约的功能,在网页上模拟、显示目前处理状态的工作流程。最后处理完成后,会转到第二页 ProgressCompleted.aspx,并在网页上显示「处理完毕」的信息。使用到的 WF Activity 如下:

* StateActivity:用来在 StateMachine 流程中,代表状态。

* EventDrivenActivity:在指定事件发生时,执行其子活动。
* HandleExternalEventActivity:用来处理本地服务所引发的事件。
* SetStateActivity:用以指定转变至某个状态。

有关程序细节,请参考下载示例中,代码里的注释。

-------------------------------------------------

参考书籍:

[1] Windows Workflow Foundation新一代工作流开发实务

作者:彭靖灏、李智桦
出版社:电子工业出版社
出版日期:2008-5-1
ISBN:9787121063018

[2] Sams Teach Yourself Windows Workflow Foundation in 24 Hours

-------------------------------------------------

转载于:https://www.cnblogs.com/xiaopohou/archive/2011/09/06/2168236.html

你可能感兴趣的文章
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>
access remote libvirtd
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
Boosting(提升方法)之AdaBoost
查看>>
Binding object to winForm controller through VS2010 Designer(通过VS2010设计器将对象绑定到winForm控件上)...
查看>>
Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)
查看>>
活现被翻转生命
查看>>
POJ 1228
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
流操作的规律
查看>>