zoukankan      html  css  js  c++  java
  • DDD:将概念显式化 之 验证规约

     刚开始的代码

     1     class 将概念显式化1
     2     {
     3         public void 请假(Guid employeeId, DateTime startDate, DateTime endDate)
     4         {
     5             var 剩余天数 = 获取员工可以请假的剩余天数(employeeId);
     6             var 请假天数 = (endDate - startDate).Days;
     7 
     8             if (请假天数 > 剩余天数)
     9             {
    10                 //抛出请假异常
    11             }
    12 
    13             //处理正常的请假逻辑   
    14         }
    15 
    16         private int 获取员工可以请假的剩余天数(Guid employeeId)
    17         {
    18             return 10;
    19         }
    20     }

    进一步重构

     1 class 将概念显式化2
     2     {
     3         public void 请假(Guid employeeId, DateTime startDate, DateTime endDate)
     4         {
     5             if (!员工是否满足请假条件(employeeId, startDate, endDate))
     6             {
     7                 //抛出请假异常
     8             }
     9 
    10             //处理正常的请假逻辑   
    11         }
    12 
    13         private bool 员工是否满足请假条件(Guid employeeId, DateTime startDate, DateTime endDate)
    14         {
    15             var 剩余天数 = 获取员工可以请假的剩余天数(employeeId);
    16             var 请假天数 = (endDate - startDate).Days;
    17 
    18             return 请假天数 <= 剩余天数;
    19         }
    20 
    21         private int 获取员工可以请假的剩余天数(Guid employeeId)
    22         {
    23             return 10;
    24         }
    25     }

    继续重构

     1     class 将概念显式化3
     2     {
     3         public void 请假(员工请假规约 规约)
     4         {
     5             if (!规约.是否满足())
     6             {
     7                 //抛出请假异常
     8             }
     9 
    10             //处理正常的请假逻辑   
    11         }
    12     }
    13 
    14     class 员工请假规约
    15     {
    16         private Guid employeeId;
    17         private DateTime startDate;
    18         private DateTime endDate;
    19 
    20         public 员工请假规约(Guid employeeId, DateTime startDate, DateTime endDate)
    21         {
    22             this.employeeId = employeeId;
    23             this.startDate = startDate;
    24             this.endDate = endDate;
    25         }
    26 
    27         public bool 是否满足()
    28         {
    29             var 剩余天数 = 获取员工可以请假的剩余天数(employeeId);
    30             var 请假天数 = (endDate - startDate).Days;
    31 
    32             return 请假天数 <= 剩余天数;
    33         }
    34 
    35         private int 获取员工可以请假的剩余天数(Guid employeeId)
    36         {
    37             return 10;
    38         }
    39     }
  • 相关阅读:
    c语言 423输出直角在右上角的等腰直角三角形
    R语言中aggregate函数进行整合数据
    c语言 425输出向下的金字塔
    C语言 423 输出直角在左上角的等腰直角三角形
    c语言 422 显示出一个横向较长的长方形
    R语言中subset函数
    R语言中for、while、if else、switch语句
    c语言 424 输出金字塔性状
    R语言中apply函数
    WinCE文件基本操作
  • 原文地址:https://www.cnblogs.com/happyframework/p/2936262.html
Copyright © 2011-2022 走看看