代码优雅写法之封装

1235.jpg

扯淡

好的代码 更多的也是为了后期维护,哪怕后期不须要你来维护 ,清晰干爽的代码也会为做者留下好的印象java

而且 在工做团队中 能够施加影响力bash

用封装消灭复杂表达式

业务场景

小江同窗想 放学后去同窗家看电视 写做业, 可能会比较晚回到家里单元测试

他须要向家里人打声招呼 若是家里人不一样意的话,他就必须后放学后直接回家学习

家里人包括 爷爷 奶奶 爸爸 妈妈 哥哥 姐姐(其中一位赞成便可)测试

代码实现之瀑布流

一个条件的成立,须要n个逻辑组合  或与并不是
    这样的代码 读起来很不舒服 读的过程当中须要从新梳理逻辑
    维护一个n年的老项目,处处是这样的长代码 接手的人也很差梳理清楚脉络
    然 封装下效果就会好不少

    if(father.permit() || mather.permit() || grandPa.permit() || grandMa.permit() || brother.permit() || sister.permit()){
        //去同窗家写做业
    }else{
        //放学后回家
    }
复制代码

代码实现之封装

Family family=Family.build(father,mather,grandPa,grandMa,....);

  if(family.permit()){
    //去同窗家写做业
  }else{
    //放学后回家
  }

 将上面主干逻辑中的 
 if(father.permit() || mather.permit() || grandPa.permit() || grandMa.permit() || brother.permit() || sister.permit())
 内化到 家庭的 业务域 中

 逻辑为:
           若是家庭赞成..
           若是家庭不一样意..   
复制代码

代码实现之封装反例 |------| 反对

if(permit()){
      //去同窗家写做业
    }else{
      //放学后回家
    }



   private boolean permit(Father father,Mather mather,GrandPa grandPa,......){
     return  father.permit() || mather.permit() || grandPa.permit() || grandMa.permit() || brother.permit() || sister.permit();
  }

将逻辑直接私有化 封装起来

1. 私有化后单元测试将覆盖不到
2. 私有化后相同的permit()的业务将散落在系统的各个角落
3. 私有化后permit()的入口不惟一   维护及其不方便
复制代码

小封装 ^_^

小江同窗 完成做业后 才能够吃饭ui

完成做业的断定规则为 学习时间>1小时this

Student xiaojiang;
      if(xiaojiang.studyTime > 1){
          //完成做业 准备吃饭
      }

      代码较短 读起来也不费劲  
      但读起来仍是要进行思惟转换
      学习时间大于1小时  等于 完成做业
    -----------------------------------------
  

   
      class Student{
                private String name;
                private Integer age;
                private Integer studyTime;
                private .......;

              添加方法 完成做业的断定
              public Boolean finished(){
                  if(this.studyTime > 1){
                      return Boolean.True;
                  }
                  return Boolean.False;
              }
      }

      Student xiaojiang;
      if(xiaojiang.finished()){
          //完成做业 准备吃饭
      }

      代码阅读逻辑为:
      小江是否完成做业
            是: 吃饭
            否: 其余

      至于 什么是我完成做业 未来业务变成 年龄>18 都没问题 
      主干逻辑不变,只需修改 学生域下的finished() 的业务表述
复制代码

总结

用封装消灭长代码 代码可读性提高spa

恰当业务模型上的对外开发的封装是负责任的封装code

私有化的封装是不建议的封装cdn

代码必须私有封装,不私有化无解,不妨跳出当前业务模型,上帝视角判断下当前模型是否合适

一些文件业务等其余 涉密的 要 private

相关文章
相关标签/搜索