我正在考虑在这个即将到来的项目中使用工作流引擎的想法。我们知道使用工作流引擎有很多注意事项,而且我们在许多平台上都有很多开发经验,所以我们愿意让工作流引擎的选择优先于我们最喜欢的工具集或开发人员IDE。
相对于外部工作流(即将SOAP调用聚合到事务感知的更高级别的SOA中),我们更感兴趣的是内部工作流(即,用于易于更改的ERP目的的petri net,而不涉及额外的编码时间)。你会推荐哪种工作流引擎?我们粗略地看了一下Oracle、Microsoft和一些open source的产品。这一切都是压倒性的,所以请只在你有实现内部工作流程的实际经验的情况下才回复。
发布于 2009-05-23 20:26:37
我过去部署过K2和WF系统。K2相当强大,但很挥霍无度。WF是一个失败者,但进步很快。两者都与.NET堆栈(特别是MOSS)很好地集成在一起,并且都有非常好的工具集成。一旦您理解了工作流模型,这两个工具都相对容易开发。
你可以从许多不同的微软合作伙伴那里获得解决方案支持,尽管我猜WF更容易获得解决方案支持(即更多的合作伙伴拥有更多了解WF的顾问,而不是K2)。
不幸的是,我没有任何使用Oracle产品或您提到的开源替代方案的经验,所以我不能对此发表评论。
如果你感到不知所措,我建议你看看WF Virtual Labs (页面底部)。他们会让你亲身体验技术,写下行话,经历几个场景。一旦你做到了这一点,理解WF如何适应你试图做的事情应该会变得容易得多。另外,我可以推荐Essential Windows Workflow --一本非常好的书。这里有一个关于WF 4.0 from PDC的很好的介绍。
发布于 2010-06-12 08:26:11
如果您可以使用状态机,那么我建议您使用一个名为StateLess by Nicholas Blumhardt (Autofaq creator)的开源项目。他的方法避免了长时间运行的工作流由运行时引擎持有的问题,因为状态是由一个简单的变量定义的,比如string或int。
下面是一个状态机示例:
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工作流所需的多个项目相比,您只需在一个程序集中实现此功能。维护性极低,没有为你的代码生成代码的“设计者”,等等。再说一次,它很简单,这就是美。
https://stackoverflow.com/questions/902375
复制相似问题