分解条件
问题
你有一个复杂的条件句(if - then
/其他的
或开关
).
解决方案
将条件的复杂部分分解为单独的方法:然后
而且其他的
.
之前
if (date.before(SUMMER_START) || date.after(SUMMER_END)){费用=数量* winterRate + winterServiceCharge;} else{收费=数量* summerRate;}
后
if (isSummer(日期)){charge = summerCharge(数量);} else{收费= winterCharge(数量);}
之前
if (date < SUMMER_START || date > SUMMER_END){收费=数量* winterRate + winterServiceCharge;} else{收费=数量* summerRate;}
后
if (isSummer(日期)){费用= SummerCharge(数量);} else{冲锋= WinterCharge(数量);}
之前
if ($date->before(SUMMER_START) || $date->after(SUMMER_END)) {$charge = $quantity * $winterRate + $winterServiceCharge;} else {$charge = $quantity * $summerRate;}
后
if (isSummer($date)) {$charge = summerCharge($quantity);} else {$charge = winterCharge($quantity);}
之前
if date.before(SUMMER_START)或date.after(SUMMER_END):收费=数量* winterRate + winterServiceCharge否则:收费=数量* summerRate
后
if isSummer(日期):charge = summerCharge(数量)else: charge = winterCharge(数量)
之前
if (date.before(SUMMER_START) || date.after(SUMMER_END)){费用=数量* winterRate + winterServiceCharge;} else{收费=数量* summerRate;}
后
if (isSummer(日期)){charge = summerCharge(数量);} else{收费= winterCharge(数量);}
为什么重构
一段代码越长,就越难理解。当代码中充满条件时,事情变得更加难以理解:
当你忙着弄清楚代码在
然后
Block,你忘记了相关的条件是什么。当你忙着分析的时候
其他的
,你忘了代码是什么然后
所做的事。
好处
通过将条件代码提取为明确命名的方法,可以使以后维护代码的人(比如您,两个月后!)的工作变得更轻松。
这种重构技术也适用于条件中的短表达式。的字符串
isSalaryDay ()
比比较日期的代码更漂亮,更具描述性。
如何重构
将条件提取到单独的方法via提取方法.
重复此过程
然后
而且其他的
块。