如果您对非 Microsoft 解决方案持开放态度,我可以为您提供一个替代方案,尽管它是基于 .Net 的。我使用了一个名为Stateless的框架,它是 Nicholas Blumhardt(Autofac 的创建者)的状态机,您可以在其中执行以下操作:
无状态的设计考虑了在 ORM 域模型中的封装。一些 ORM 对映射数据的存储位置提出了要求。为此,StateMachine 构造函数可以接受将用于读取和写入状态值的函数参数:
var stateMachine = new StateMachine<State, Trigger>(
() => myState.Value,
s => myState.Value = s);
只需很少的努力,您就可以保留您的状态,然后稍后轻松地检索该状态。请注意,您无需托管单独的运行时环境。如果您的状态由一个整数表示,您可以获取该值,使用当前状态实例化一个无状态对象,您现在就可以更新您的状态机了。美妙之处在于您不需要 Workflow Foundation 通常所需的开销。
我已经在生产中使用了 4 个月,效果很好。我认为你可以很容易地适应 ASP.Net MVC。
在动态更新工作流方面,如果您配置状态机,例如
var stateMachine = new StateMachine<string, int>();
并在 XML 中维护一个单独的状态和触发器文件,您可以通过遍历字符串 int 值对在运行时执行配置。