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 的角色。
图 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-1ISBN:9787121063018[2] Sams Teach Yourself Windows Workflow Foundation in 24 Hours
-------------------------------------------------