32

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

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

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

4

1 回答 1

40

当我完成这个工作时,我将尝试列出我发现的一些东西。从分析的角度来看,大多数可能有点肤浅(特别是因为我对这两个框架都是新手),但希望它会帮助某人。

无状态

优点

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

缺点

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

Windows 工作流基础

优点

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

缺点

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