无状态(谷歌代码)和Windows工作流程之间的比较

时间:2010-02-13 17:34:41

标签: c# .net workflow-foundation state-machine

我开始认为我应该抛弃Windows WF,转而采用更简单的方法。我不一定需要暂停工作流执行很长一段时间,以后再恢复它们。我想要一个简单的状态机框架,它具有基本的挂起/恢复/中止(没有序列化),但是。

我已经下载了Stateless framework from Google Code,我将开始玩它,但很想听听其他.NET程序员使用的内容。

编辑无状态似乎很容易实现,但我不知道这对糖果机是否正确。在自动化中,我总是对如何使用状态机感到矛盾。虽然我使用术语“状态机”,但我这样做很松散,因为我更像是一个流程图。我没有使用状态来表示机器所处的当前模式,而是使用它来执行函数。所以在这种情况下使用Stateless,我实际上是使用从一个状态到下一个状态的转换作为在我的糖果机控制器中调用函数的机制。想法?

1 个答案:

答案 0 :(得分:41)

当我解决这个问题时,我会尝试列出一些我正在寻找的东西。从分析的角度来看,大多数人可能会有点肤浅(特别是因为我对两个框架都不熟悉),但希望它能帮助某人。

<强>无国籍

赞成

  • 开源
  • 语法简洁易读
  • google code上的mercurial repo中的相当不错的例子
  • 我可以非常快速地使用无状态将我的UML状态图转换为代码。
  • 状态维护非常简单 - 我可以轻松添加和删除。扩展方法允许我在不同的行上配置状态,因此我可以注释掉我不想使用的触发器或操作。
  • 将数据传送到状态机或从状态机传递数据非常简单,您可以在代码隐藏中使用它。
  • 同样,状态机可以以各种方式更新GUI。现在,我正在通过接口修改数据,然后GUI使用计时器来更新其元素。我也可以使用BackgroundWorker来做到这一点。
  • 我刚开始使用子状态来处理我的GUI,它需要管理各种状态,如Running,Paused,Aborted和Idle。暂停状态具有子状态,因为用户可以以各种方式暂停系统,但恢复触发器特定于它们暂停的方式。我喜欢通过使用轻量级状态机框架来管理GUI的启用/禁用和工具提示。

缺点

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

Windows Workflow Foundation

赞成

  • 设计工作流程的图形方法
  • 支持持久性,暂停,恢复,中止工作流程
  • MS可能有一支庞大的程序员团队来支持这个
  • GUI可以非常轻松地禁用/重新启用活动

缺点

  • 设计工作流程的图形方法隐藏了这个事情非常复杂的事实
  • 为了使用持久性并获得暂停/恢复/中止,您必须安装并设置“持久性服务”,我还没有弄清楚如何开始工作。我可以很好地设置SQL数据库,但是在运行时我遇到了一堆我不理解的错误。
  • 因为它来自MS,你不知道它是否会存在很长时间或完全掉线。
  • 错误处理有点奇怪,因为您可以使用后面的代码或FaultHandler
  • 将数据从WF传递到您的主应用程序很复杂,需要像WCF(另一种技术,我现在没有足够的时间充分学习),或者使用ExternalDataExchange接口。