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

Dav*_*ave 33 .net c# state-machine workflow-foundation

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

我已经从Google Code下载了无状态框架,我将开始玩它,但是很想听听其他.NET程序员使用的内容.

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

Dav*_*ave 41

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

无状态

优点

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

缺点

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

Windows Workflow Foundation

优点

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

缺点

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