我已经不止一次的看到,有的人代码里有这样的函数
A.XXX B.XXX C.XXX A.YYY B.YYY C.YYY A.ZZZ B.ZZZ C.ZZZ |
这个函数要处理A,B,C 3个对象,每个对象要进行XXX,YYY,ZZZ,3种处理。于是形成了上面的9个语句。读上面的代码是不容易理解的,因为A.XXX,B.xxxx往往是没有关系的。读者难以理解为什么放在一起。A.XXX A.YYY是有关系的,但是他们隔着很远的距离。直到A.ZZZ读者恍然大悟,原来代码的意图是这样。
这是很不好的设计。大概因为作者写代码的时候,发现ABC都需要做一件什么事情,写完后发现,还需要做另一件事情。这种走一步看一步的结果就导致上述的代码。我称之为横向编程,缺乏立体感,层次感。这会导致冗余代码增加,不容易修改。
最简单的修复的办法,就是函数:
f(Obj){ Obj.XXX Obj.yyy Obj.zzz } |
f(A) f(B) f( C ) |
此外如果需要的话,使用template模式,
public class Tmp{ O{ XXX YYY ZZZ } void XXX void YYY void ZZZ } A extends Tmp; B extends Tmp; C extends Tmp; |
总之层次化便于减少代码的冗余,便于理解方法之间的关系。