[重构]Long Method
Long Method(过长函数)
定义:函数太长,逻辑混乱,临时变量太多等。。
影响:可读性差,引起其它坏味道导致维护成本高。
目标:分解。增强可读性。
有个很有趣的例子:问:要把大象装冰箱里分几步?答:分三步。。
这个其实很有条理性,想要完成一件事情,把这件事情分成一小步一小步去做。为什么呢?“不积跬步,难以至千里。”好像有点歪楼了。。
下面看来看看这个函数。
public class NumberRange { private readonly int _minValue; private readonly int _maxValue; public NumberRange(int minValue, int maxValue) { _minValue = minValue; _maxValue = maxValue; } public bool Include(int number) { return number > _minValue && number < _maxValue; } }
这样我第一眼看到GetMatchedPairResult函数内部时,
1、分别获取号码后四位
2、判断号码是否在范围内(IsInTheRange)
3、判断号码是否是Lucky(IsLuckyNumber)
为什么把这个大函数分解为4个小函数?
大函数,它让别人读起来很困难,很难让人理解维护此函数的成本自然就提高了。小函数,可以让我们一眼看出它的招数或者单看名字就应该猜到它是如何实现。这样的函数才算完美。对于我们上面的Long Method,先分析函数的作用,然后把函数内部做的每一个步骤分离开来。分别抽出小函数。提高一个小函数的解释能力,同时这个小函数也可以被其他函数重用。个人比较喜欢7行以内的函数,虽然7是我的Lucky Number,这样让自己读起来感觉很爽。如果能在加上清晰的函数命名,爽歪歪了。
至于一个函数的抽象粒度以及抽象层次要根据场景。(这句话很虚,没有具体的好场景,今后单独整这个场景)
2012/8/