何时使用Windows Workflow Foundation?

有些东西更容易手工(代码)实现,但有些更容易通过WF。 它看起来像WF可以用来创build(几乎)任何types的algorithm。 所以(理论上)我可以在WF中完成所有的逻辑,但是对于所有的项目来说,这可能是一个糟糕的主意。

在什么情况下使用WF是一个好主意,什么时候会让事情变得更困难呢? WF与手动编码有什么优点和缺点/成本?

只有满足以下任何条件才可能需要WF:

  1. 你有一个长期运行的过程。
  2. 你有一个经常变化的过程。
  3. 你需要一个过程的视觉模型。

有关更多详细信息,请参阅Paul Andrew的文章: 如何使用Windows Workflow Foundation?

请不要将WF与任何types的可视化编程混淆或联系起来。 这是错误的,并可能导致非常糟糕的架构/devise决策。

决不。 你可能会后悔的。

为什么? 简单,

  • 陡峭的学习曲线
  • 难以debugging
  • 难以维护
  • 没有提供足够的动力,灵活性或生产力增加来certificate其使用的合理性
  • 可以并将损坏无法恢复的应用程序状态

我唯一能想到使用WF的方法是,如果我想为最终用户devisedevise师,那么可能还没有。

相信我,没有什么比您所写的代码更加直接,强大或灵活地完成您所需要的代码。 远离WF。

当然,这只是我的意见,但我认为这是一个很好的。 🙂

由WF生成的代码是讨厌的。 WF带来的价值在于系统的视觉performance,虽然我还没有看到任何东西(我现在正在使用WF工作的6-7个项目),我不希望更简单的手工编码的项目。

一般来说,如果您不需要持久性和跟踪function(在我看来是主要function),则不应使用Workflow Foundation。

以下是我从我的经验中收集的Workflow Foundation的优缺点:

优点

  • 持久性:如果你要有许多长时间运行的stream程(想几天,几周,几个月),那么工作stream程对此非常重要。 空闲的工作stream实例被保存到数据库,所以不会占用内存。
  • 跟踪:WF提供跟踪在工作stream程中执行的每个活动的机制
  • *视觉devise师:我把这个作为*,因为我认为这只是用于营销目的。 作为一名开发人员,我更愿意编写代码,而不是直观地将各种东西拼凑在一起。 而当你有一个非开发人员制作工作stream程时,你经常会遇到一个混乱的混乱。

缺点

  • 编程模型:编程function非常有限。 想想你在C#中的所有优秀function,然后忘掉它们。 在C#中简单的一行或两行语句就成为一个相当大的块活动。 这对inputvalidation尤其痛苦。 话虽如此,如果你真的很小心只保留工作stream中的高级逻辑,而其他所有的东西都在C#中,那么这可能不成问题。
  • 性能:工作stream程占用大量的内存。 如果您在服务器上部署大量工作stream程,请确保您拥有大量内存。 另外请注意,工作stream比正常的C#代码慢得多。
  • 陡峭的学习曲线,难以debugging:如上所述。 你将花费大量的时间来弄清楚如何使事情发挥作用,并找出最好的办法。
  • 工作stream程版本不兼容:如果您使用持久性部署工作stream程,并且需要更新工作stream程,则旧的工作stream程实例不再兼容。 据说这是在.NET 4.5中修复的。
  • 你必须使用VBexpression式(.NET 4.5允许C#expression式)。
  • 不灵活:如果您需要某些非Workflow Foundation提供的特殊function或特定function,则需要付出很大的代价。 在某些情况下,甚至不可能。 谁知道,直到你尝试? 这里有很多风险。
  • 没有接口的WCF XAML服务:通常使用WCF服务,您可以根据接口进行开发。 使用WCF XAML服务,您无法确保WCF XAML服务已经实现了界面中的所有内容。 你甚至不需要定义一个接口。 (我所知道的…)

我发现使用工作stream程基础的主要原因是它在跟踪和持久性方面给您带来了多less启发。 持久性服务的启动和运行非常简单,这将带来多个实例和主机之间的可靠性和负载分配。

另一方面,就像表单应用程序一样,工作streamdevise师推动你的代码模式也很糟糕。 但是,您可以通过在工作stream中编写任何代码来避免问题,并将所有工作委托给其他类,这些类可以比工作stream更加优雅地进行组织和unit testing。 然后,您将获得devise师酷炫的视觉效果,而不会留下背后的意大利面代码。

就我个人而言,我并没有在WF上出售。 对于我来说,它的有用性并不像其他新的MS技术那样明显,比如WPF或者WCF。

我认为WF未来将在商业应用中被大量使用,但我没有计划使用它,因为它似乎不是我的项目的正确工具。

我目前正在为Windows Workflow Foundation(WF)工作,他们select使用它的原因是因为规则经常在变化,这将迫使他们重新编译各种dll等,所以他们的解决scheme将规则放在数据库中并从那里调用它们。 这样他们可以改变规则,而不必重新编译和重新分配dll等。

有关

Windows工作stream程

顺便说一句,它现在只是叫WF一天.. http://bloggingabout.net/blogs/erwyn/archive/2006/06/16/12522.aspx

Windows工作stream和其表兄BizTalk一样,诱惑非编码的IT经理,BAs等,但实际上unit testing,debugging和代码覆盖只是众多陷阱中的三个。 你可以克服其中的一些,但你必须投入巨资来实现这一点,而用简单的代码,你只是得到了。 如果你真的有一个长期的需求,那么你可能需要更复杂的东西。 我听说过有关将新的xaml文件放入生产而不重新编译dll的争论,但老实说,工作stream将消耗的时间可以更好地用于改善持续集成,使编译部署不成问题。

我将在任何需要使用工作stream程的环境中使用它,但是当将它与K2甚至SharePoint 2007结合使用时,平台的强大function是非常有用的。 在开发BI专业人员的商业应用程序时,build议使用该平台,这通常只与精简和改进业务stream程有关。

loggingWF是与K2的开发团队共同开发的,新的K2 Blackpearl是build立在WF之上的,MOSS 2007和WSS 3.0的工作stream引擎也是如此。

当您不想手动编写所有这些代码来维护可视化界面,跟踪和持久性时,为WF投票是明智的select。