代码之家  ›  专栏  ›  技术社区  ›  Kaveh Shahbazian

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

  •  0
  • Kaveh Shahbazian  · 技术社区  · 15 年前

    注一:我想实现一个主从通信,其中服务器端总是被动的(从),我的工作流主要执行与这种通信方案相关的任务。

    注二:由于在我的项目中,它是决定,我们将不使用wf4(IMHO一个正确的决定),我需要一些设计指南,以实现一个(简单的)工作流工具箱。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ladislav Mrnka    15 年前

    如果不想使用工作流基础,可以将工作流创建为GOF状态模式的实现。

    简单实现:

    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();
      }
    }
    

    这是非常基本的实现。你可以进一步扩展它。您可以添加其他方法集,比如CanDoSomething,您可以维护已创建状态实例的集合,因为状态实例是无状态的,所以您不需要在每次移动到状态时创建新的instnace等。