无状态(在Google代码上)和Windows Workflow的比较

32

我开始思考是否应该放弃Windows WF,转而选择更简单的东西。我不一定需要暂停工作流执行并在以后恢复它们。我想要一个简单的状态机框架,具有基本的挂起/恢复/中止功能(无需序列化)。

我已经从Google Code下载了Stateless框架,准备开始尝试使用,但很想听听其他.NET程序员正在使用什么。

编辑 Stateless似乎很容易实现,但我确实想知道它是否适用于糖果机。在自动化方面,我总是感到关于状态机如何被使用的冲突。虽然我使用“状态机”这个术语,但我更松散地使用它来执行函数。因此,在这种情况下,使用Stateless,我实际上会使用从一个状态到另一个状态的转换作为调用我的糖果机控制器中的函数的机制。你有什么想法?


2
我只是想说,我仍然非常喜欢Stateless。 :) - Dave
1个回答

40

在我进行这个过程中,我会尝试列出一些我发现的事情。大多数可能从分析角度来看都有点肤浅(特别是因为我对这两个框架都很陌生),但希望能帮助到某些人。

无状态 (Stateless)

优点

  • 开源
  • 语法简洁易读
  • Google Code上的mercurial仓库中有很好的示例
  • 使用无状态可以非常快速地将我的UML状态图转换为代码。
  • 状态维护非常简单——我可以轻松添加和删除。扩展方法允许我在不同的行上配置状态,因此我可以注释掉我不想使用的触发器或动作。
  • 将数据传递给/从状态机很容易,并且您可以按您希望的方式在代码后台中执行此操作。
  • 同样,状态机可以以各种方式更新GUI。当前,我通过一个接口修改数据,然后GUI使用计时器来更新其元素。我也可以使用BackgroundWorker来做这件事。
  • 我刚开始使用子状态来处理我的GUI,它需要管理各种状态(如运行、暂停、中止和空闲)。暂停状态具有子状态,因为用户可以以多种方式暂停系统,但是恢复触发器是特定于它们暂停的方式的。我喜欢使用轻量级状态机框架来管理我的GUI的启用/禁用和工具提示。

缺点

  • 没有内置的暂停、恢复、中止机制
  • 只有一个开发人员支持该项目。然而,我最近遇到问题时得到了帮助。
  • 如果不小心使用,可能会被误用。我第一次尝试实现状态机框架时,实现不当。它运行得非常好几个月,然后最终在运行时间很长的过程中死亡了。结果发现我导致状态处理程序堆积,并且出现了堆栈溢出情况。

Windows Workflow Foundation (WF)

优点

  • 图形化的流程设计方法。
  • 支持持久化、暂停、恢复和中止工作流。
  • 微软可能有一个庞大的程序员团队来支持这个。
  • GUI使禁用/重新启用活动变得非常容易。

缺点

  • 图形化的流程设计方法隐藏了这个东西相当复杂的事实。
  • 为了使用持久性并获取暂停/恢复/中止功能,您必须安装并设置“持久性服务”,我还没有找到如何让其正常工作。我可以很好地设置SQL数据库,但在运行时,我会遇到一堆我不理解的错误。
  • 因为它来自微软,你不知道它是否能够长期存在或完全被放弃。
  • 错误处理有点奇怪,因为你可以使用代码后台或FaultHandler。
  • 将数据从WF传递到主应用程序很复杂,需要类似WCF(另一个我现在没有足够时间充分学习的技术)或使用ExternalDataExchange接口。

Cons #3 是一个有效的关注点,不仅因为可能会被删除...但是他们在 .net 的 3.5 和 4.0 之间进行了重大改变。谁知道 5.0 是否会涉及更多的变化... - Bryce Fischer
我想要放弃WF的其中一个原因是因为我不知道何时会转向4.0版本,而他们将会移除一项工作流并采用另一种完全不同的方式(至少从我记得的来看)。 - Dave

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