一份支持WF的有力论据

38

我曾长时间挣扎于寻找工作流(即:WF)与常规命令式编程之间的一个有说服力的应用案例。每次我都得出结论,应该将WF排除在外或推迟到以后再考虑。但我一直有这种烦人的感觉,觉得自己似乎遗漏了什么。

有没有人知道任何真正为工作流方式提供有力支持的书籍?这本书必须(i)教授WF技术,和(ii)使用适当的案例展示如果我们只是做常规的直接编码,那么WF会让实现更容易完成。

我会非常感激。


7
《Shukla和Schmidt的Essential Windows Workflow Foundation》第1章在31页内从基础开始激发了WF的使用案例和设计动机。这是我看过的自“Essential COM”以来最好的技术解释之一,让人恍然大悟。但请注意,该书非常注重基础知识,因此不会回答您“教授WF”或运行案例研究类型的需求。尽管如此,该书对于进入思维模式仍然非常宝贵,并且作为一个曾经有同样“我是否理解这个?”感觉的人,它确实帮助了我! - itowlson
1
非常好的问题,每当我试图决定是否采用WF方式时,我总是与同事们争论不休。我一直遵循的一个原则是,如果你不确定是否需要WF,那么很可能你不需要WF,而这个原则一直取得了良好的成功率。 - Abel Morelos
5个回答

20

从非专业人士的角度来看,对于我来说,有两件事情让我支持 WF – 其中一件是工作流平台所特有的,另一件则是更方便的事情。

方便的功能是能够创造新的活动组合方式。命令式编程只提供了有限的组合原语:基本上只有序列、if-else和循环。WF允许您构建自己的组合操作符,例如交替执行、并行执行、第一个完成等等。当然,它还内置了状态机的复杂组合机制。

我认为这是一个方便的功能,因为您可以在像C#这样的命令式语言中构建所有这些操作符:实际上这就是您构建WF操作符的方法。但是WF使得使用和阅读自定义组合更加容易,而在C#中,则可能会迅速下降到 lambda表达式的地狱中。所以,如果您有复杂的编排需求——也就是说,如果您的活动之间的组合方式比序列、if-else和循环更加复杂 ——那么WF可能会使您的程序更容易表达和理解。

独特的功能是耐久性。这是Shukla和Schmidt书的出发点,并且一直回归到这个主题。用C#或VB编写的命令式程序可以运行数小时、数天、数周,如果幸运的话,甚至可能持续数月……但最终IIS会循环应用程序池,管理员将要安装最新的安全更新,或者有人会被绊倒电源线。那么,您的程序如何记住“好的,我已经从Unimaginative Company Names R Us获得了采购订单,并正在等待来自Bank of Breadheads Inc.的信用批准,当我收到批准时,就可以发送确认电子邮件”?

在传统命令式程序中,当进程结束时,执行状态也会随之消失。你可以启动一个新的进程,但它将从程序的开头开始。当然,你可以创建一个数据库并使用它来存储标志,如“已获得采购订单”和“已获得信用批准”。但现在你必须编写应用程序特定的代码来保存和查询状态,并根据该状态跳回程序的正确点。而且你必须为每个长时间运行的应用程序设计一个新的数据库和新的保存/恢复/跳转逻辑。
持久化工作流是解决这个问题的方法。如果将程序编写为活动的工作流,则WF将负责持久化其状态,包括执行流程的位置。运行程序的计算机可能会着火并烧毁数据中心,但当银行的响应到达时,WF将在您的其他数据中心中唤醒您的程序,并以正确的位置和正确的数据开始运行。
对我而言,这就是WF的“有力证据”。在许多情况下,你不需要它:应用程序的生命周期足够短暂,失败不是一个重要的问题,重新启动也是一种可行的恢复策略。但对于生命周期较长的应用程序,例如你可能会协调需要几个小时才能响应的外部系统,或涉及需耗时数天的人工业务流程,持久性可能是WF的致命特点。
免责声明:我不是WF程序员,也从未构建过真正的WF系统。我的观点来自BizTalk背景和我对WF阅读的了解,因此这个评估有点理论性。但仍然希望它能对大家有所帮助!

1
根据我的经验,吸引人们使用工作流基础架构的另一件事情是它的工具。 - Tim Lovell-Smith
工作流的另一个使用案例是当应用程序/工作流需要经常更改时。在抽象层面上(即图形化工作流语言)工作比每48小时在命令式编程语言中进行修改更容易。 - mttr

5
我不确定是否有一个好的答案来回答你的问题。问题并不是因为你提出的问题无效或任何其他原因,因为你正在询问两个非常不同的事情。
首先,你要求提供使用工作流的令人信服的理由。这是一个非常主观的问题,与技术无关。您可以在网络上找到白皮书,指向各种成功和不成功的工作流实现。无论使用哪种技术,使用产品X完成的解决方案也可以使用产品Y完成。Shukla和Schmidt的章节确实解释了基本原理,但我不确定它是否是一本好书,可以告诉您何时以及如何应用工作流。
其次,您正在寻找一本教您Windows Workflow Foundation的书。首先是WF3还是WF4,因为它们是非常不同的东西。我会假设WF4,因为它将在.NET 4发布时(现在就要发布)取代WF3,在大多数情况下从WF3开始没有太多意义。但是,由于WF3从未很受欢迎,而且对大多数作家来说,书籍市场并不是非常有利可图,因此尚未出现任何WF4书籍。我相信Bruce Bukovics正在编写他的新版本《Pro WF:Windows Workflow in .NET 3.5》,我发现这是其中一个更实用的WF3书籍。到目前为止还没有什么东西,您只能使用msdn网站上的非常有限的文档和像我的博客这里。当然还有一些课程,例如DevelopMentor的this(注意:我是主要课程作者,这是一种无耻的宣传)
我在这个答案here中提供了一些理由,这些可能会对你有所帮助。
虽然不完全回答了您的问题,但我希望所有这些对您仍然有用。

问题得到足够的赞同票,使其成为 Stack 上一个有效的问题。 - djangofan
当然是这样,毫无疑问。我只能希望有人能提供比我更好的答案。 - Maurice

1

这并不是一个直接的答案,但如果搜索其他资源可能会有所帮助。对我来说,WF 看起来相当紧密地围绕着 业务流程执行语言 (BPEL) 引入的概念建模。这个标准已经存在了很长时间,任何使用 BPEL 的例子都应该让你知道什么时候使用 WF。

我没有使用过 WF,但当我玩弄 BPEL 时,我发现它很难使用。这主要是由于工具支持(我发现用于可视化建模的 Eclipse 插件缺乏)。当你将这个与在 XML 中阅读代码相比“正常编程语言语法”更难的事实结合起来时,BPEL 不是一个可行的解决方案。如果 WF 有一个好的可视化工具,那么这个问题至少已经得到了解决。


1
我喜欢“大规模编程和小规模编程”的解释。将WF活动视为用于将整个工作流程分成单独部分的模块。 - Maurice
它确实看起来很像BPEL。不过,WF4.0在VS10中有一些不错的可视化工具 - 我认为。(我非常偏见! :-)) - Tim Lovell-Smith

1
好的理由包括: 对您的业务流程进行视觉概述。 您甚至可以让客户-领域专家-使用设计师编辑工作流程;重新启动应用程序并使其在无需重新编译的情况下运行。
好书:Bruce Bukowics和我一直最喜欢的PRO C#2010和.NET 4框架都有出色的章节。

0

我不知道有没有特别讲述这个主题的书。然而,我认为 WF(或其他工作流产品)吸引人的部分原因在于它重新引入了松耦合、基于消息的范式,这正是最初的面向对象(如 Alan Kay 等人)感兴趣的。

在 WF 中,“消息”被传递的概念并不是立即显而易见的。然而,对象作为离散机器的概念是清晰明确的。

关于 OO 状态的非常棒(但有些疯狂)的书籍,请参阅 David West 的 Object Thinking。关于 Alan Kay 对 OO 意义的讨论,请参阅 此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接