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;
            }
        }
    }
  • 相关阅读:
    CSS效果:CSS实用技巧制作三角形以及箭头效果
    JS之this应用详解
    JS之iscroll.js的使用详解
    一个测试人员眼中的创业团队七宗罪
    一个WEB应用的开发流程
    一个年薪一百万的程序员:技术进阶之路
    一个十年IT从业者的职场感言:为什么不要自称是“程序员”
    一位程序员工作10年总结的13个忠告,却让很多人惋惜
    当个好的测试经理不容易,懂得这些很重要
    测试经理岗位职责及应具备的能力
  • 原文地址:https://www.cnblogs.com/gaocong/p/6688608.html
Copyright © 2011-2022 走看看