zoukankan      html  css  js  c++  java
  • 代码的坏味道:“横向”编程

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

    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
  • 相关阅读:
    Linux系统常见的压缩与打包
    java 语言规范 java language specifications
    java 枚举
    github邮箱验证技巧
    关于 python
    博客园 编程基础 精华
    fiddler
    一个牛人写的博客
    使用xmarks同步 chrome ie firefox safari书签
    linux 中的 tar 解压
  • 原文地址:https://www.cnblogs.com/alphablox/p/3006477.html
Copyright © 2011-2022 走看看