-, , , .
Stratgey , :
public interface IPriceCalculation
{
public InsurancePrice CalculatePrice(CarData data);
}
public class InsurancePrice
{
public string Description { get; set; }
public decimal Price { get; set; }
}
public class BrandDealerMonthlyPaymentCalculation : IPriceCalculation
{
public InsurancePrice CalculatePrice(CarData data)
{
return new InsurancePrice()
{
Description = "Policy price with a Brand dealer and monthly payments",
Price = 250.25;
};
}
}
public class BrandDealerYearlyPaymentCalculation : IPriceCalculation
{
public InsurancePrice CalculatePrice(CarData data)
{
}
}
public class NonBrandDealerYearlyCalculation : IPriceCalculation
{
public InsurancePrice CalculatePrice(CarData data)
{
}
}
public class NonBrandDealerMonthlyCalculation : IPriceCalculation
{
public InsurancePrice CalculatePrice(CarData data)
{
}
}
. , GetInsurance ( InsuranceFactory), ctor. , DI, , ctor :
public class InsuranceFactory
{
private List<IPriceCalculation> _priceCalculators = new List<IPriceCalculation>();
public InsuranceFactory()
{
_priceCalculators.Add(new BrandDealerYearlyPaymentCalculation());
_priceCalculators.Add(new BrandDealerMonthlyPaymentCalculation());
_priceCalculators.Add(new NonBrandDealerYearlyCalculation());
_priceCalculators.Add(new NonBrandDealerMonthlyCalculation());
}
}
GetInsurance InsuranceFactory :
public Insurance GetInsurance(CarData carData)
{
var insurance = new Insurance();
foreach (IPriceCalculation calculator in _priceCalculators)
{
insurance.PriceOptions.Add(calculator.CalculatePrice(carData));
}
return insurance;
}
, GetInsurance , . , (insurance.PriceOptions), . , . , .
, . , . , 2 (Brand PaySchedule), 2 , 2 x 2 = 4 . , CreditScore (Goor, Fair, Poor). :
GoodCreditBrandDealerYearlyPaymentCalculation
GoodCreditBrandDealerMonthlyPaymentCalculation
GoodCreditNonBrandDealerYearlyCalculation
GoodCreditNonBrandDealerMonthlyCalculation
FairCreditBrandDealerYearlyPaymentCalculation
FairCreditBrandDealerMonthlyPaymentCalculation
FairCreditNonBrandDealerYearlyCalculation
FairCreditNonBrandDealerMonthlyCalculation
PoorCreditBrandDealerYearlyPaymentCalculation
PoorCreditBrandDealerMonthlyPaymentCalculation
PoorCreditNonBrandDealerYearlyCalculation
PoorCreditNonBrandDealerMonthlyCalculation
. , , , . , Calculation. , GetInsurance - .