长版:在C#中实现的工作流的基本元素/组件是什么(不使用WF 3.5或WF 4的任何部分)?
注意I:我想实现主从通信,其中服务器端始终是被动的(从属),我的工作流主要执行与此类通信方案相关的任务。
注意二:由于在我的项目中我们决定不使用WF 4(恕我直言,这是一个正确的决定),我需要一些设计指南来实现(简单)工作流工具箱。
由于
答案 0 :(得分:1)
如果您不想使用Workflow基础,可以将工作流程创建为GOF State模式的实现。
简单实施:
public class Workflow
{
internal IState Current { get; set; }
public void Start()
{
Current = new StartState();
Current.Start(this);
}
public void DoSomething()
{
Current.DoSomething(this);
}
public void DoSomethingElse()
{
Current.DoSomethingElse(this);
}
}
public interface IState
{
Start(Workflow context);
DoSomething(Workflow context);
DoSeomethingElse(Workflow context);
}
public abstract BaseState : IState
{
public virtual void Start(Workflow context)
{
throw new InvalidStateOperationException();
}
public virtual void DoSomething(Workflow context)
{
throw new InvalidStateOperationException();
}
public virtual void DoSomethingElse(Workflow context)
{
throw new InvalidStateOperationException();
}
}
public class StartState : BaseState
{
public override void Start(Worklfow context)
{
// Do something
context.Current = new OtherState();
}
}
这是juse非常基本的实现。你可以进一步扩展它。您可以添加其他一组方法,如CanDoSomething,您可以维护已创建的State实例的集合,因为State实例是无状态的,因此每次移动到状态等时都不需要创建新的instnace。