我曾长时间挣扎于寻找工作流(即:WF)与常规命令式编程之间的一个有说服力的应用案例。每次我都得出结论,应该将WF排除在外或推迟到以后再考虑。但我一直有这种烦人的感觉,觉得自己似乎遗漏了什么。
有没有人知道任何真正为工作流方式提供有力支持的书籍?这本书必须(i)教授WF技术,和(ii)使用适当的案例展示如果我们只是做常规的直接编码,那么WF会让实现更容易完成。
我会非常感激。
我曾长时间挣扎于寻找工作流(即:WF)与常规命令式编程之间的一个有说服力的应用案例。每次我都得出结论,应该将WF排除在外或推迟到以后再考虑。但我一直有这种烦人的感觉,觉得自己似乎遗漏了什么。
有没有人知道任何真正为工作流方式提供有力支持的书籍?这本书必须(i)教授WF技术,和(ii)使用适当的案例展示如果我们只是做常规的直接编码,那么WF会让实现更容易完成。
我会非常感激。
从非专业人士的角度来看,对于我来说,有两件事情让我支持 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 看起来相当紧密地围绕着 业务流程执行语言 (BPEL) 引入的概念建模。这个标准已经存在了很长时间,任何使用 BPEL 的例子都应该让你知道什么时候使用 WF。
我没有使用过 WF,但当我玩弄 BPEL 时,我发现它很难使用。这主要是由于工具支持(我发现用于可视化建模的 Eclipse 插件缺乏)。当你将这个与在 XML 中阅读代码相比“正常编程语言语法”更难的事实结合起来时,BPEL 不是一个可行的解决方案。如果 WF 有一个好的可视化工具,那么这个问题至少已经得到了解决。
我不知道有没有特别讲述这个主题的书。然而,我认为 WF(或其他工作流产品)吸引人的部分原因在于它重新引入了松耦合、基于消息的范式,这正是最初的面向对象(如 Alan Kay 等人)感兴趣的。
在 WF 中,“消息”被传递的概念并不是立即显而易见的。然而,对象作为离散机器的概念是清晰明确的。
关于 OO 状态的非常棒(但有些疯狂)的书籍,请参阅 David West 的 Object Thinking。关于 Alan Kay 对 OO 意义的讨论,请参阅 此处。