你推荐哪个工作流引擎?

5
我正在考虑在即将到来的项目中使用工作流引擎。我们知道使用工作流引擎存在许多注意事项,而且我们在许多平台上都有开发经验,所以我们愿意让工作流引擎的选择优先于我们最喜欢的工具集或开发者 IDE。
我们更关注内部工作流程(即宠物里网,用于易于更改的 ERP 目的,而无需涉及额外的编码时间),而不是外部工作流程(即将 SOAP 调用聚合到事务感知的更高级别 SOA 中)。您会推荐哪个工作流引擎?我们已经对 OracleMicrosoft 和一些 开源 内容 进行了肤浅的研究。这一切都非常令人不知所措,因此请仅在您真正拥有实施内部工作流程的经验时回复。
2个回答

8
如果您能使用状态机,那么我建议您使用一个叫做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所需的多个项目,您只需在一个程序集中实现此功能。维护成本极低,没有为您生成代码的“设计师”等。再次强调,这很简单,这就是它的美妙之处。


6
我过去曾经部署过K2和WF系统。K2非常强大,但是价格昂贵。WF是一个不起眼的选择,但是正在快速改进。两者都可以很好地集成到.NET堆栈(尤其是MOSS)中,并且都有非常好的工具集成。一旦了解了工作流模型,两者都相对容易开发。
您可以从许多不同的MS合作伙伴那里获得两者的解决方案支持,虽然我猜测WF可能更容易获得解决方案支持(即更多的合作伙伴有更多了解WF的顾问比K2)。
不幸的是,我没有使用过Oracle产品或您提到的开源替代品,因此无法对其进行评论。
如果你感到不知所措,我建议你看一下WF虚拟实验室(页面底部)。这将让你亲手接触技术,了解行话,并经历一些场景。一旦你掌握了这些,理解WF如何适应你正在尝试做的事情就会变得更加容易。此外,我可以推荐Essential Windows Workflow——非常好的书。这里有一个关于PDC上的WF 4.0的好介绍。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接