第三章代码的坏味道

2020-03-11  本文已影响0人  后来丶_a24d

目录


代码的坏味道

重复代码

过长函数

过大的类

  1. 一个类应该是一个清楚地抽象,处理一些明确的责任。不这样的类往往含有大量函数和数据,而且太大不易理解此时你需要考虑哪些部分可以分离出去,并将它们分离到一个单独的类中。如果某些数据和某些函数总是一起出现,某些数据经常同时变化甚至彼此依赖,这就表示你应该将它们分离出去。一个有用的测试就是问自己,如果搬移了某些字段和函数,会发生什么事?其他字段和函数是否因此变得无意义。
  2. 另一个往往在开发后期出现的信号时类的子类化方式。如果你发现子类化只影响类的部分特性,或如果你发现某些特性需要以一种方式来子类化,某些特性则需要以另一种方式子类化,这就意味着你需要分解原来的类

过长参数列

public int gamma(int inputVal,int quantity,int yearToDate){
        int importantValue1 = (inputVal * quantity)+100;
        int importantValue2 = (inputVal * yearToDate)+100;
        if((yearToDate-importantValue1)>100){
            importantValue2-=20;
        }
        int importantValue3 = importantValue2 * 7;
        return importantValue3 - 2*importantValue1;
    }
 
    public int gammaRepair(int inputVal,int quantity,int yearToDate){
        return new RepMethodObject(inputVal,quantity,yearToDate).gamma();

发散式变化

散弹式修改

依恋情结

数据泥团

基本类型偏执

switch 惊悚现身

夸夸其谈的未来性

过度耦合的消息连

class Person {
    Department _department;

    public Department getDepartment(){
        return _department;
    }

    public void setDepartment (Department arg){
        _department = arg;
    }
    
}

class Department{
    private String _chargeCode;
    private Person _manager;

    public Department (Person manager){
        _manager = manager;
    }

    public Person getManager{
        return _manager;
    }

}
//如果客户希望知道某人的经理是谁, 他必须先获得Department对象:
manager = john.getDepartment().getManager();
//修改下加个函数
public Person getManager(){
    return _department.getManager();
}
//这时候就对客户端隐藏了Department和Person 关系
manager = john.getManager();

中间人

InappropriateIntimacy(狎昵关系)

  1. 使用 move method和move field帮它们划清界线
  2. 使用extract class把两者共同点提炼到一个安全地点

不完整的类库

RefusedBequest(被拒绝的遗赠)

过多的注释


参考文章

上一篇下一篇

猜你喜欢

热点阅读