有些事情通过手工(代码)更容易实现,但有些事情通过 WF 更容易实现。看起来 WF 可以用来创建(几乎)任何类型的算法。所以(理论上)我可以在 WF 中完成所有逻辑,但对所有项目都这样做可能是个坏主意。
在什么情况下使用 WF 是个好主意,什么时候它会让事情变得更难?WF 与手工编码的优缺点/成本是什么?
有些事情通过手工(代码)更容易实现,但有些事情通过 WF 更容易实现。看起来 WF 可以用来创建(几乎)任何类型的算法。所以(理论上)我可以在 WF 中完成所有逻辑,但对所有项目都这样做可能是个坏主意。
在什么情况下使用 WF 是个好主意,什么时候它会让事情变得更难?WF 与手工编码的优缺点/成本是什么?
仅当满足以下任一条件时,您才可能需要 WF:
有关更多详细信息,请参阅 Paul Andrew 的帖子:使用 Windows Workflow Foundation 做什么?
请不要将 WF 与任何类型的可视化编程混淆或联系起来。这是错误的,可能导致非常糟糕的架构/设计决策。
绝不。你可能会后悔:
我唯一能想到使用 WF 的情况是,如果我想为最终用户托管设计器,甚至可能不会。
相信我,没有什么比您编写的代码更直接、强大或灵活的了,它可以完全按照您的需要去做。远离WF。
当然,这只是我的意见,但我认为这是一个该死的好。:)
WF生成的代码很讨厌。WF 带来的价值在于系统的可视化表示,尽管我还没有看到任何我不喜欢更简单的手工编码项目的东西(现在有 6-7 个与 WF 合作的项目) .
一般来说,如果您不需要持久性和跟踪功能(我认为这是主要功能),您不应该使用 Workflow Foundation。
以下是我从经验中收集到的 Workflow Foundation 的优缺点:
好处
缺点
我发现使用工作流基础的主要原因是它在跟踪和持久性方面让您开箱即用。持久化服务很容易启动和运行,这带来了多个实例和主机之间的可靠性和负载分布。
另一方面,就像表单应用程序一样,工作流设计师推动您使用的代码模式很糟糕。但是您可以通过在工作流中不编写代码并将所有工作委托给其他类来避免问题,这些类可以比工作流更优雅地组织和单元测试。然后,您将获得设计师的酷炫视觉方面,而无需背后的意大利面条代码。
就个人而言,我不卖WF。它的用处对我来说并不像 WPF 或 WCF 等其他新的 MS 技术那样明显。
我认为 WF 将来会在商业应用程序中大量使用,但我没有使用它的计划,因为它似乎不是我项目工作的正确工具。
我目前工作的公司建立了一个 Windows Workflow Foundation (WF),他们选择使用它的原因是因为规则会经常发生变化,这将迫使他们重新编译各种 dll 等,因此他们的解决方案是将规则放在数据库中并从那里调用它们。这样他们就可以更改规则,而不必重新编译和重新分发 dll 等。
Windows 工作流吸引了非编码 IT 经理、BA 等,就像它的表亲 BizTalk 一样,但在实践中,单元测试、调试和代码覆盖只是众多陷阱中的三个。你可以克服其中的一些,但你必须投入大量资金来实现这一目标,而使用纯代码你就能做到这一点。如果你真的有一个长期运行的需求,那么你可能需要更复杂的东西。我听说过关于能够在不重新编译 dll 的情况下将新的 xaml 文件投入生产的争论,但老实说,工作流将消耗的时间可以更好地用于改进您的持续集成,使编译的部署不成问题。
我会在需要使用工作流的任何环境中使用它,但是当它与 K2 甚至 SharePoint 2007 结合使用时,该平台的强大功能确实非常有用。与 BI 专家一起开发业务应用程序时,建议使用该平台,这通常只与简化和改进业务流程相关。
WF 是与 K2 的开发团队共同开发的,新的 K2 Blackpearl 是建立在 WF 之上的,MOSS 2007 和 WSS 3.0 的工作流引擎也是如此。
当您不想手动编写所有这些代码来维护可视化界面、跟踪和持久性时,选择 WF 是一个明智的选择。
几个月来,我一直在使用 Windows 工作流来开发自定义活动和重新托管的设计器,非开发人员可以使用它来构建工作流。WF 非常强大,但仅与开发人员构建的自定义活动一样好。归根结底,开发人员必须查看由非开发人员构建的工作流以进行测试和调试,但从他们可以创建草案工作流的角度来看,这太棒了。
此外,如果您的进程运行时间较长,当您需要动态更新进程时,WF 是一个很好的技术堆栈 - 无需重新安装/下载或执行任何操作,只需将新的 XAML 文件添加到目录中,您的体系结构应该是设置版本控制以废弃旧版本并使用新版本。