工作流程的基本要素是什么?

时间:2010-09-18 13:15:55

标签: c# design-patterns workflow

长版:在C#中实现的工作流的基本元素/组件是什么(不使用WF 3.5或WF 4的任何部分)?

注意I:我想实现主从通信,其中服务器端始终是被动的(从属),我的工作流主要执行与此类通信方案相关的任务。

注意二:由于在我的项目中我们决定不使用WF 4(恕我直言,这是一个正确的决定),我需要一些设计指南来实现(简单)工作流工具箱。

由于

1 个答案:

答案 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。