WF的强大案例

我一直在努力寻找一个引人注目的工作stream用例(即:WF),而不是经常性的命令式编程。 每当我回到结论,我应该离开WF,或延迟进入,直到后来。 但我一直有这种唠叨的感觉,有一些东西是错过的。

有没有人知道任何书,真正强大的工作stream方式的情况? 本书必须:(1)很好地教授WF;(2)展示WF实现容易实现的恰当用例,而不是我们常规的直接编码。

我将不胜感激。

从非专家的angular度来看,有两件事让我想起了WF–一个是工作stream平台的独特之处,另一个可能更便于使用。

便利function是创造组合活动的新方式的能力。 命令式编程仅提供有限的组合原语库:基本上sorting,if-else和循环。 WF允许你build立你自己的组合运算符,如交错执行,并行执行,首先通过post等。当然,它具有内置状态机的复杂构成机制。

我说这是一个方便的function,因为你可以使用像C#这样的命令式语言来构build所有这些操作符:事实上,这就是你如何构buildWF操作符。 但是WF使得它易于使用阅读自定义的组合,而在C#中,你会迅速下载lambdaexpression式的冰雹。 所以,如果你有复杂的协调要求 – 也就是说,如果你的活动合在一起比序列更复杂,if-else和循环 – 那么WF可能使你的程序更容易expression和理解。

独特的function是耐用性 。 这是舒克拉和施密特(Schukla)和施密特(Schmidt)的着作开始的地方,以及它不断回来的地方。 用C#或VB编写的命令式程序可以运行几个小时,几天,几周,如果幸运的话,甚至几个月…但最终IIS将循环应用程序池,或pipe理员将要安装最新的安全更新,或者有人会通过电源线跳闸。 那么你的程序如何记住,“好吧,我已经从Unimaginative公司名称R Us获得了订单,而且我正在等待Bank of Breadheads Inc.的信用批准,当我得到这个信息时,我可以发送确认电子邮件”?

在传统的命令式程序中,当进程死亡时,执行状态随之死亡。 你可以开始一个新的过程,但是它会从程序的开始开始。 当然,您可以创build一个数据库并使用它来存储诸如“获得订单”和“获得信用审批”等标志。 但是现在您必须编写特定于应用程序的代码来保存和查询状态,并根据该状态跳转到程序中的正确位置。 而且您必须为每个长时间运行的应用程序devise一个新的数据库和新的保存/恢复/跳转逻辑。

持久的工作stream程就是解决这个问题。 如果您将程序编写为活动工作stream程,那么WF将负责保持其状态,包括执行stream程中的状态。 运行程序的机器可能会着火并烧毁您的数据中心,但是当银行的响应进入时,WF会在您的其他数据中心中唤醒您的程序,然后它将在正确的地方开始运行数据。

对我来说,这是WF的“强大案例”。 在许多情况下,您并不需要它:应用程序足够短,故障不是一个重要的问题,从头开始重新启动是一个可行的恢复策略。 但是对于长期的应用程序,例如可能需要几个小时才能响应的外部系统,或涉及可能需要数天才能响应的人员的业务stream程,耐用性可能是WF的杀手级function。

免责声明:我不是一个WF程序员,从来没有build立一个现实世界的WF系统。 我是从BizTalk背景来的,从我读过的WF的angular度来看,所以这个评估是有点理论的。 希望它可以帮助所有相同的!

不知道你的问题是否有一个很好的答案。 问题不是这个问题是无效的,或者是因为你要求两个完全不同的东西。

首先,您要求使用工作stream程的令人信服的理由。 这是一个非常主观的问题,而不是相关的技术。 你可以在网上find白皮书,指出各种成功的,不成功的工作stream程实现。 这与技术无关,使用某种产品X完成的解决scheme也可以使用产品Y完成。舒克拉和施密特的这一章肯定地解释了基本原理,但我不确定这是一本好书,它向您展示了何处如何应用工作stream程。

其次,你正在寻找一本书来教你Windows Workflow Foundation。 第一个问题是WF3或WF4,因为它们是非常不同的野兽。 我将假设WF4,因为这将取代WF3时.NET 4的发布(现在很快),并从WF3开始在大多数情况下没有多大意义。 但是由于WF3从来没有非常stream行,书市对大多数作家来说都不是很有利可图,所以还没有WF4书。 我相信Bruce Bukovics正在开发一个新版本的他的Pro WF:Windows Workflow in .NET 3.5书,我发现了一本更实用的WF3书​​籍。 到目前为止,没有任何东西,而且你在这里的msdn网站和博客上的文档非常有限。 当然,从DevelopMentor这样的课程当然也是如此 (注意:因为我是主要课程作者,无耻的插件)

在这个答案中,我提供了许多理由,这些可能会帮助你一些。

这不是一个对你的问题的答案,但我希望这一切对你仍然有用。

这也不是一个直接的答案,但这可能是有益的,如果search其他资源。 对我来说,WF看起来像是在业务stream程执行语言(BPEL)中引入的概念相当密切的模型。 这std。 已经存在了比WF长很多的时间,并且任何BPEL的使用都应该让您知道如何使用WF。

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

好的理由是:对您的业务stream程进行视觉展示。 您甚至可以让您的客户 – 领域专家 – 与devise师一起编辑工作stream程; 重新启动应用程序并使其运行而不重新编译

好书:布鲁斯Bukowics和我最喜欢的:PRO C#2010和.NET 4框架有一个很好的篇章

我不知道有关这个话题的专门书。 但是,我相信WF(或其他工作stream产品)的吸引力之一在于,它重新引入了原始OO人(如Alan Kay)感兴趣的松散耦合的,基于消息的范例的可能性。

WF中传递的“消息”的概念并不明显。 然而,作为分立机器的对象的概念是。

对于一个关于面向对象状态的令人敬畏(但有点疯狂)的书,请参阅David West的对象思维 。 在这里看到艾伦·凯关于面向对象的讨论。