关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。
想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。
8年前关闭。
Improve this question
我正在考虑在这个即将到来的项目中使用工作流引擎的想法。我们知道使用工作流引擎有很多注意事项,而且我们在许多平台上都有很多开发经验,因此我们愿意让工作流引擎的选择优先于我们最喜欢的工具集或开发人员 IDE。
与外部工作流(即将 SOAP 调用聚合到具有事务感知能力的更高级别 SOA)相比,我们对内部工作流(即,用于轻松更改 ERP 目的而不涉及额外编码时间的 Petri 网)更感兴趣。您会推荐哪种工作流引擎?我们通过 Oracle 粗略地查看了产品, Microsoft ,还有一些 open source东西也是。这一切都非常令人难以抗拒,因此请仅在您具有实现内部工作流程的实际经验时才做出回应。
最佳答案
如果您可以使用状态机,那么我推荐一个名为 StateLess by Nicholas Blumhardt (Autofaq creator) 的开源项目。 .他的方法避免了运行时引擎持有长时间运行的工作流的问题,因为状态是由一个简单的变量(如字符串或整数)定义的。
这是一个示例状态机:
var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
phoneCall.Configure(State.OffHook)
.Permit(Trigger.CallDialed, State.Ringing);
phoneCall.Configure(State.Ringing)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.CallConnected, State.Connected);
phoneCall.Configure(State.Connected)
.OnEntry(() => StartCallTimer())
.OnExit(() => StopCallTimer())
.Permit(Trigger.LeftMessage, State.OffHook)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.PlacedOnHold, State.OnHold);
// ...
phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);
您的状态可以是一个整数,这将允许您从数据库中为其提供当前状态。这可以在状态机的构造函数上设置,如下所示:
var stateMachine = new StateMachine<State, Trigger>(
() => myState.Value,
s => myState.Value = s);
与运行 Windows 工作流所需的多个项目相比,您可以仅在一个程序集中实现这一点。维护成本极低,没有“设计师”为您等生成代码。同样,它很简单,而且美就在这里。
关于workflow - 您推荐哪种工作流引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/902375/