示例#1
0
        public override void Audit(ApplyContext context)
        {
            Console.WriteLine($"请求有{base.AuditerName} 审核");
            if (context.Hour <= 16)
            {
                context.AuditResult = true;
                context.AuditRemark = "去享受你的假期吧";
            }
            else
            {
                //AbstractAuditer charge = new Manager() {
                //   AuditerName = "Manager"
                //};
                //charge.Audit(context);

                base.AuditNext(context);
            }
        }
示例#2
0
        public override void Audit(ApplyContext context)
        {
            Console.WriteLine($"请求有{base.AuditerName} 审核");
            if (context.Hour <= 24)
            {
                context.AuditResult = true;
                context.AuditRemark = "去享受你的假期吧";
            }
            else
            {
                //AbstractAuditer chief = new Chief()
                //{
                //    AuditerName = "Chief"
                //};
                //chief.Audit(context);

                base.AuditNext(context);
            }
        }
示例#3
0
 /// <summary>
 /// 下一级审核,放在父类里面,继承的子类也就都可以拥有
 /// </summary>
 /// <param name="context"></param>
 protected void AuditNext(ApplyContext context)
 {
     nextAuditer?.Audit(context);
 }
示例#4
0
 public abstract void Audit(ApplyContext context);
示例#5
0
        static void Main(string[] args)
        {
            /*场景:请假审批流程
             * PM(项目组长审核8小时的)-->Charge主管审核16-->Manager(经理审核24小时)-->Chief(总监审核32)
             */
            ApplyContext context = new ApplyContext()
            {
                Id          = 1,
                Name        = "张三",
                Hour        = 32,
                Description = "我想回家",
                AuditResult = false,
                AuditRemark = ""
            };

            {
                //下面的写法直白明了,是面向过程变成(POP);
                //缺点:暴露业务的细节,而且毫无技术含量,代码翻译机
                //if (context.Hour < 8)
                //{
                //    Console.WriteLine("PM审核通过该");
                //}
                //else if (context.Hour < 16)
                //{
                //    Console.WriteLine("主管审核通过该");
                //}
                //else
                //{
                //    Console.WriteLine("******************");
                //}
            }
            {
                /*责任链模式实现,第一次封装*/
                //Console.WriteLine("责任链模式实现,第一次封装");

                //AbstractAuditer pm = new PM();
                //pm.Audit(context);

                //if (!context.AuditResult)
                //{
                //    AbstractAuditer charge = new Charge();
                //    charge.Audit(context);

                //    if (!context.AuditResult)
                //    {
                //        //未完待续
                //    }
                //}
            }

            {
                /*责任链模式实现,第二次封装,在角色审核方法里面添加else 后自动转给下一个角色进行审核*/
                //Console.WriteLine("责任链模式实现,第二次封装");

                //AbstractAuditer pm = new PM()
                //{
                //    AuditerName = "PM"
                //};
                //pm.Audit(context);
                //bool result = context.AuditResult;
            }

            {
                /*
                 * 上面的方式已经是oop的实现方式,但是也有很大的问题,就是下一级在类里面写死了,如果流程变了则要改动类
                 * 怎么样保证代码的稳定的性呢? 把不稳定的部分甩出去,甩锅大法
                 * 代码再改动下,在虚拟父类里面添加设置下一个审批人的方法,然后改动每个子类实现该方法
                 */

                AbstractAuditer pm = new PM()
                {
                    AuditerName = "PM"
                };
                AbstractAuditer charge = new Charge()
                {
                    AuditerName = "Charge"
                };
                AbstractAuditer manager = new Manager()
                {
                    AuditerName = "Manager"
                };
                AbstractAuditer chief = new Chief()
                {
                    AuditerName = "Chief"
                };

                //设置下一级
                pm.SerNext(charge);
                charge.SerNext(manager);
                manager.SerNext(chief);

                //开始审核
                pm.Audit(context);
                bool result = context.AuditResult;
                Console.WriteLine($"result:{result}");
            }
        }