//修改前
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;
}
}
}