代码的坏味道:“横向”编程

我已经不止一次的看到,有的人代码里有这样的函数

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;

总之层次化便于减少代码的冗余,便于理解方法之间的关系。

Technorati Tags: 重构, Template

转载于:https://www.cnblogs.com/alphablox/archive/2013/04/07/3006477.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值