职分链形式的拔取

回到目录,回到目录

回来目录

回到目录

任务链形式

它是一种设计模块,首要将操作流程与具体操作解耦,让各种操作都可以安装本人的操作流程,那对于工作流应用是3个没错的取舍!
下边是合法正式的概念:义务链情势是一种设计形式。在义务链方式里,很多目的由每2个目的对其下家的引用而连接起来形成一条链。请求在那么些链上传递,直到链上的某二个对象说了算拍卖此呼吁。发出那个请求的客户端并不知道链上的哪三个对象最后处理这几个请求,那使得系统可以在不影响客户端的情事下动态地再一次社团和分红义务。

义务链形式

它是一种设计模块,主要将操作流程与具体操作解耦,让种种操作都足以设置本身的操作流程,那对于工作流应用是1个正确的选项!
下边是官方正式的概念:义务链情势是一种设计格局。在职务链方式里,很多目标由每三个对象对其下家的引用而连接起来形成一条链。请求在这一个链上传递,直到链上的某三个目的说了算拍卖此恳请。发出这一个请求的客户端并不知道链上的哪1个对象最后处理这一个请求,那使得系统可以在不影响客户端的情景下动态地重新协会和分配义务。

职分链情势组成

  1. 三大目的
  2. 命令处理
  3. 处理流程
  4. 命令上下文
  • 一声令下只担负协会种种流程的次第,对流程已毕细节没兴趣
  • 现实流程只兑现和谐关怀的代码,对下一个流水线未知

    ####  在切实代码中的体现

    泛泛命令
    c# public interface ICommand { void Execute(CommandParameters parameters); }
    抽象流程

     /// <summary>
     /// 工作流-抽象处理者
     /// </summary>
     public abstract class WorkFlow
     {
     protected WorkFlow Next; // 定义后继对象
     protected object SharedObj;  // 共享对象
    
     // 设置后继者
     public WorkFlow SetNext(WorkFlow next)
     {
         Next = next;
         return next;
     }
    
     // 抽象请求处理方法
     public virtual void ProcessRequest(CommandParameters command)
     {
         if (Next != null)
             Next.ProcessRequest(command);
     }
     }
    

    命令需求把参数传递给逐个工作流程

      public class CommandParameters
      {
      public string CommandType { get; set; }
      public string JsonObj { get; set; }
    
      public CommandParameters(string type, string jsonObj)
      {
          CommandType = type;
          JsonObj = jsonObj;
      }
      }
    

    上面看2个职分链格局里的具体命令和现实性流程(步骤),各种步骤可以安装它下一步是哪些

      public class CommandInsert : ICommand
      {
    
      public void Execute(CommandParameters parameters)
      {
          WorkFlow workFlow = new WorkFlow_InsertLogger();
          workFlow.SetNext(new WorkFlow_InsertAudit());
          workFlow.ProcessRequest(parameters);
      }
      }
      public class CommandUpdate : ICommand
      {
      public void Execute(CommandParameters parameters)
      {
          WorkFlow workFlow = new WorkFlow_InsertAudit();
          workFlow.SetNext(new WorkFlow_InsertLogger());
          workFlow.ProcessRequest(parameters);
      }
      }
      public class WorkFlow_InsertLogger : WorkFlow
      {
      public override void ProcessRequest(CommandParameters command)
      {
          System.Console.WriteLine("WorkFlow1");
          ProcessRequest(command);
      }
      }
      public class WorkFlow_InsertAudit : WorkFlow
      {
      public override void ProcessRequest(CommandParameters command)
      {
          System.Console.WriteLine("WorkFlow2");
          ProcessRequest(command);
      }
      }
      public class ChainResponsibility
      {
      [Fact]
      public void Test1()
      {
          var command = new CommandInsert();
          command.Execute(new CommandParameters("test", "OK"));
      }
    
      [Fact]
      public void Test2()
      {
          var command = new CommandUpdate();
          command.Execute(new CommandParameters("test", "OK"));
      }
      }
    

    待续……
    回去目录

义务链格局组成

  1. 三大目标
  2. 一声令下处理
  3. 处理流程
  4. 指令上下文
  • 命令只承担协会各种流程的次第,对流程完毕细节没兴趣
  • 切实流程只兑现自身关切的代码,对下一个流水线未知

    ####  在具体代码中的浮现

    抽象命令
    c# public interface ICommand { void Execute(CommandParameters parameters); }
    空洞流程

     /// <summary>
     /// 工作流-抽象处理者
     /// </summary>
     public abstract class WorkFlow
     {
     protected WorkFlow Next; // 定义后继对象
     protected object SharedObj;  // 共享对象
    
     // 设置后继者
     public WorkFlow SetNext(WorkFlow next)
     {
         Next = next;
         return next;
     }
    
     // 抽象请求处理方法
     public virtual void ProcessRequest(CommandParameters command)
     {
         if (Next != null)
             Next.ProcessRequest(command);
     }
     }
    

    一声令下需求把参数传递给各种工作流程

      public class CommandParameters
      {
      public string CommandType { get; set; }
      public string JsonObj { get; set; }
    
      public CommandParameters(string type, string jsonObj)
      {
          CommandType = type;
          JsonObj = jsonObj;
      }
      }
    

    下边看三个职务链方式里的实际命令和现实流程(步骤),逐个步骤可以安装它下一步是何等

      public class CommandInsert : ICommand
      {
    
      public void Execute(CommandParameters parameters)
      {
          WorkFlow workFlow = new WorkFlow_InsertLogger();
          workFlow.SetNext(new WorkFlow_InsertAudit());
          workFlow.ProcessRequest(parameters);
      }
      }
      public class CommandUpdate : ICommand
      {
      public void Execute(CommandParameters parameters)
      {
          WorkFlow workFlow = new WorkFlow_InsertAudit();
          workFlow.SetNext(new WorkFlow_InsertLogger());
          workFlow.ProcessRequest(parameters);
      }
      }
      public class WorkFlow_InsertLogger : WorkFlow
      {
      public override void ProcessRequest(CommandParameters command)
      {
          System.Console.WriteLine("WorkFlow1");
          ProcessRequest(command);
      }
      }
      public class WorkFlow_InsertAudit : WorkFlow
      {
      public override void ProcessRequest(CommandParameters command)
      {
          System.Console.WriteLine("WorkFlow2");
          ProcessRequest(command);
      }
      }
      public class ChainResponsibility
      {
      [Fact]
      public void Test1()
      {
          var command = new CommandInsert();
          command.Execute(new CommandParameters("test", "OK"));
      }
    
      [Fact]
      public void Test2()
      {
          var command = new CommandUpdate();
          command.Execute(new CommandParameters("test", "OK"));
      }
      }
    

    待续……
    回到目录