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;
            }
        }
    }
  • 相关阅读:
    【CF1009F】Dominant Indices(长链剖分优化DP)
    长链剖分学习笔记
    【洛谷5294】[HNOI2019] 序列(主席树维护单调栈+二分)
    【洛谷5286】[HNOI2019] 鱼(计算几何)
    【洛谷5292】[HNOI2019] 校园旅行(思维DP)
    【UVA1309】Sudoku(DLX)
    初学DLX
    【LOJ2461】「2018 集训队互测 Day 1」完美的队列(分块+双指针)
    【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)
    【LOJ6060】「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基)
  • 原文地址:https://www.cnblogs.com/gaocong/p/6688608.html
Copyright © 2011-2022 走看看