无状态(在谷歌代码上)和Windows工作流之间的比较[关闭]

2024-01-16

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

我已经下载了来自 Google Code 的无状态框架 http://code.google.com/p/stateless/我将开始使用它,但很想听听其他 .NET 程序员正在使用什么。

EDIT无状态似乎很容易实现,但我确实想知道这是否适合糖果机。在自动化领域,我总是对应该如何使用状态机感到矛盾。尽管我使用“状态机”这个术语,但我的使用比较宽松,因为我使用它更像是流程图。我没有使用状态来表示机器当前所处的模式,而是使用它来执行函数。因此,在这种无状态的情况下,我实际上会使用从一种状态到下一种状态的转换作为调用糖果机控制器中的函数的机制。想法?


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

无国籍

Pros

  • 开源
  • 语法简洁且易于阅读
  • 谷歌代码的 Mercurial 存储库中有很好的例子
  • 我可以非常快速地将我的 UML 状态图转换为使用无状态的代码。
  • 状态维护非常简单——我可以轻松添加和删除。扩展方法允许我在单独的行上配置状态,这样我就可以注释掉我不想使用的触发器或操作。
  • 将数据传递到状态机或从状态机传递数据很容易,您可以在代码隐藏中按照自己的意愿进行操作。
  • 同样,状态机可以通过多种方式更新GUI。现在,我正在通过界面修改数据,然后 GUI 使用计时器来更新其元素。我也可以使用BackgroundWorker 来做到这一点。
  • 我刚刚开始使用子状态来处理我的 GUI,它需要管理各种状态,如运行、暂停、中止和空闲。暂停状态具有子状态,因为用户可以通过多种方式暂停系统,但恢复触发器特定于它们暂停的方式。我喜欢能够通过使用轻量级状态机框架来管理 GUI 的启用/禁用和工具提示。

Cons

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

Windows 工作流基础

Pros

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

Cons

  • 设计工作流程的图形方法掩盖了这个事情非常复杂的事实
  • 为了使用持久性并获得暂停/恢复/中止,您必须安装并设置“持久性服务”,我还没有弄清楚如何开始工作。我可以很好地设置 SQL 数据库,但在运行时我收到一堆我不明白的错误。
  • 因为它来自 MS,所以你不知道它是否会存在很长时间或完全被丢弃。
  • 错误处理有点奇怪,因为您可以使用代码隐藏或FaultHandler
  • 将数据从 WF 传递到主应用程序很复杂,需要诸如 WCF(另一种我现在没有足够时间充分学习的技术)之类的技术,或者使用ExternalDataExchange 接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无状态(在谷歌代码上)和Windows工作流之间的比较[关闭] 的相关文章

  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

    我正在为我的 ASP NET 应用程序使用 DevTrends MvcDonutCaching 包 它工作得很好 我目前遇到的一个问题是使我为子操作设置的 VaryByCustom 缓存无效 这是我用于 VaryByCustom 设置的一些
  • 使用 microsoft word.interop 删除 Word 文档中的空白页

    我创建了一个Word文档 它使用以下命令生成动态内容词互操作 它有一些分页符之间使用 我面临的问题是 此分页符会创建我不想向用户显示的空白页面 在某些情况下 我需要在那里添加这些分页符以维护页面布局 因此我无法考虑删除这些分页符 但我想要的
  • C# 列表框 ObservableCollection

    我正在尝试使用 ListBox DataSource ObservableCollection 但是我不知道如何在 OC 更新时让列表框自动更新 我可以在 OC 上挂接 CollectionChanged 事件 但是我需要对列表框执行什么操
  • 外部组件中的控制器上的 404

    我在解决 Asp Net MVC 4 项目中的 404 响应时遇到问题 它是在 VS2012 中构建的 目标版本为 4 5 我已将预编译的视图和控制器内置到独立的 DLL 中 我能够动态加载 DLL 并从我的核心项目中检查它们 甚至调用它们
  • tcmalloc/jemalloc 和内存池之间有什么区别(以及选择的理由)?

    tcmalloc jemalloc是改进的内存分配器 还引入了内存池以更好地分配内存 那么它们之间有什么区别以及在我的应用中如何选择它们呢 这取决于您的程序的要求 如果您的程序有更多的动态内存分配 那么您 需要从可用的分配器中选择一个内存分
  • 在 C# 中使用 as 关键字与泛型类型发生冲突的编译时行为

    当尝试对无法转换为的非泛型类型使用 C as 关键字时 编译器会给出无法转换类型的错误 但是 当对泛型类型使用 as 关键字时 编译器不会给出错误 public class Foo public class Bar
  • 从 Linq 的列表中选择多个字段

    在 ASP NET C 中 我有一个结构 public struct Data public int item1 public int item2 public int category id public string category
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • Java 中有类似 .NET 的 NotImplementedException 的东西吗?

    有没有类似 NET 的东西NotImplementedException在Java中 康芒斯朗 http commons apache org proper commons lang javadocs api 2 6 org apache
  • 为什么 C# 编译的正则表达式比等效的字符串方法更快?

    每次我必须对字符串执行简单的包含或替换操作 其中我正在搜索的术语是固定值 时 我发现如果我获取示例输入并对其进行一些分析 则使用编译的正则表达式是几乎 总是比使用 String 类中的等效方法更快 我尝试过比较多种方法 hs是要搜索的 干草
  • C++ 静态工厂构造函数

    我正在进行模拟 它需要创建多个相当相似的模型 我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型 例如 模型 createTriangle or 模型 createFromFile 我从以前的 java 代码中汲取了这个想法
  • 如何定义 Swagger UI 参数的默认值?

    我已将 Swagger Swashbuckle 集成到 NET Core 2 2 API 项目中 一切都很好 我的要求纯粹是为了方便 考虑以下 API 方法 public Model SomeEstimate SomeRequest req
  • System.Drawing.Icon 构造函数抛出“操作成功完成”异常

    在 Windows XP 计算机上 以下代码抛出 System ComponentModel Win32Exception 并显示消息 操作成功完成 System Drawing Icon icon new System Drawing I
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • g++4.9 不支持 std::align

    在学习对齐问题等时 我意识到我的 g 4 9 macports OS X 实现不支持std align 如果我尝试编译 使用 std c 11 此示例代码来自http www cplusplus com reference memory a
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐