seb*_*aan 5 c# design-patterns
我正在努力研究如何改进我编写的一些代码,这些代码使用一些规则来计算汽车保险的几个不同的价格.这是困扰我的作品:
public Insurance GetInsurance(CarData carData)
{
var insurance = new Insurance();
insurance.priceGeneral = this.CalculatePrice(new Car { BrandDealer = false, MonthPayment = false, CarData = carData });
insurance.priceGeneralMonth = this.CalculatePrice(new Car { BrandDealer = false, MonthPayment = true, CarData = carData });
insurance.priceBrandDealer = this.CalculatePrice(new Car { BrandDealer = true, MonthPayment = false, CarData = carData });
insurance.priceBrandDealerMonth = this.CalculatePrice(new Car { BrandDealer = true, MonthPayment = true, CarData = carData });
return insurance;
}
Run Code Online (Sandbox Code Playgroud)
请注意,计算每月支付超过正常价格(年度支付)存在显着差异,并且依赖于BrandDealer是真还是假,还有不同的计算方法.我试图消除这个变量,但客户要求这些规则.
我知道有些属性不是"Car"的实际属性,但我很快就会重构.
我被4次这样的计算所困扰,将来会有更多的规则.即将推出的新规则将添加另一个布尔值和另外两个计算.
是否有一些不错的设计模式,我在这里没有发现我应该使用的?
小智 0
您需要做的是将计算分解为更小的部分。您需要找到通用代码并将其保存在地图中。假设 calc 1 = A * B + C. 且 calc 2 = A * C - b
您只需执行 A 、 B 、C 一次并将其保存在 hashmap 中。现在 calc 2 = hash.getOrAdd(A key) * hash.getOrAdd(C key) - hash.getOrAdd(C key)。
如果你找不到任何通用代码,那么你就不走运了,需要执行所有计算。