zoukankan      html  css  js  c++  java
  • 方法级别的抽象

    //修改前
    public class Customer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public bool IsPriorityCustomer { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    public class ProspectiveCustomer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    
    
    public class ProspectiveCustomerValidator
    {
        public Customer CreateValidatedCustomer(
        ProspectiveCustomer prospectiveCustomer)
        {
            if (string.IsNullOrWhiteSpace(
            prospectiveCustomer.FirstName))
            {
                throw new ArgumentException("Invalid FirstName");
            }
            if (string.IsNullOrWhiteSpace(
            prospectiveCustomer.SecondName))
            {
                throw new ArgumentException("Invalid SecondName");
            }
            var newValidCustomer = new Customer
            {
                FirstName = prospectiveCustomer.FirstName,
                SecondName = prospectiveCustomer.SecondName
            };
            if (prospectiveCustomer.AnnualIncome > 100000)
            {
                newValidCustomer.IsPriorityCustomer = true;
            }
            return newValidCustomer;
        }
    }
    //修改后
    using System;
    
    public class Customer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public bool IsPriorityCustomer { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    public class ProspectiveCustomer
    {
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public decimal AnnualIncome { get; set; }
    }
    public class ProspectiveCustomerValidator
    {
        // Higher abstraction level
        public Customer CreateValidatedCustomer(
        ProspectiveCustomer prospectiveCustomer)
        {
            EnsureValidDetails(prospectiveCustomer);
            var validatedCustomer =
            CreateNewCustomerFrom(prospectiveCustomer);
            SetCustomerPriority(validatedCustomer);
            return validatedCustomer;
        }
        // Medium abstraction level
        private static void EnsureValidDetails(
        ProspectiveCustomer prospectiveCustomer)
        {
            EnsureValidFirstName(prospectiveCustomer);
            EnsureValidSecondName(prospectiveCustomer);
        }
    
        private static Customer CreateNewCustomerFrom(
        ProspectiveCustomer prospectiveCustomer)
        {
            return new Customer
            {
                FirstName = prospectiveCustomer.FirstName,
                SecondName = prospectiveCustomer.SecondName,
                AnnualIncome = prospectiveCustomer.AnnualIncome
            };
        }
        // Low abstraction level
        private static void EnsureValidFirstName(
        ProspectiveCustomer prospectiveCustomer)
        {
            if (string.IsNullOrWhiteSpace(prospectiveCustomer.FirstName))
            {
                throw new ArgumentException("Invalid FirstName");
            }
        }
        private static void EnsureValidSecondName(
        ProspectiveCustomer prospectiveCustomer)
        {
            if (string.IsNullOrWhiteSpace(
            prospectiveCustomer.SecondName))
            {
                throw new ArgumentException("Invalid SecondName");
            }
        }
        private static void SetCustomerPriority(Customer customer)
        {
    
            if (customer.AnnualIncome > 100000)
            {
                customer.IsPriorityCustomer = true;
            }
        }
    }
  • 相关阅读:
    Java的三种代理模式
    关于C# 中的Attribute 特性
    jvm虚拟机原理1
    Java和C#中的接口对比(有你不知道的东西)
    c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
    Java运行时,各种类型存储介绍
    Java中的内存处理机制和final、static、final static总结
    Debug目录、Release目录,bin目录、obj目录,vshost.exe.config文件、.exe.config文件分析【C#】
    C#有关的vshost、exe、config格式说明
    C#中的程序集和命名空间
  • 原文地址:https://www.cnblogs.com/gaocong/p/6688608.html
Copyright © 2011-2022 走看看