美文网首页
代码优雅写法之封装

代码优雅写法之封装

作者: 江小六_ | 来源:发表于2019-08-08 23:50 被阅读0次
1235.jpg

扯淡

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

并且 在工作团队中 可以施加影响力

用封装消灭复杂表达式

业务场景

小江同学想 放学后去同学家看电视 写作业, 可能会比较晚回到家里

他需要向家里人打声招呼 如果家里人不同意的话,他就必须后放学后直接回家

家里人包括 爷爷 奶奶 爸爸 妈妈 哥哥 姐姐(其中一位同意即可)

代码实现之瀑布流

    一个条件的成立,需要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()的入口不唯一   维护及其不方便

小封装 _

小江同学 完成作业后 才可以吃饭

完成作业的判定规则为 学习时间>1小时

      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() 的业务表述

总结

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

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

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

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

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

相关文章

  • 代码优雅写法之封装

    扯淡 好的代码 更多的也是为了后期维护,哪怕后期不需要你来维护 ,清晰干爽的代码也会为作者留下好的印象并且 在工作...

  • 代码优雅写法之逆向逻辑

    扯淡 好的代码 更多的也是为了后期维护,哪怕后期不需要你来维护 ,清晰干爽的代码也会为作者留下好的印象并且 在工作...

  • 你还在用 Retrofit + RxJava 吗? 不不, Ok

    第一篇:OkHttp 优雅封装 OkHttps 之 气海雪山初探第二篇:OkHttp 优雅封装 OkHttps 之...

  • 代码优化

    参考: 复杂判断的优雅写法简单几步让你的 JS 写得更漂亮优化 if-else 代码结构 一、复杂判断的优雅写法8...

  • 优雅的try...catch

    1.原有写法 2.使用vavr 引入依赖 编写测试 总结 使用此写法可以将代码更加优雅.

  • 代码优雅写法之多态

    扯淡 好的代码 更多的也是为了后期维护,哪怕后期不需要你来维护 ,清晰干爽的代码也会为作者留下好的印象并且 在工作...

  • OkHttp 优雅封装 OkHttps 之 回调线程魔变

    第一篇:OkHttp 优雅封装 HttpUtils 之 气海雪山初探第二篇:OkHttp 优雅封装 HttpUti...

  • 读取文件编码格式mime

    代码示例之原生js 代码示例之vue 插件安装 封装代码 应用封装代码 在线获取文件编码的地址:https://g...

  • iOS-知识点积累

    iOS之代码优雅法则之 GCC

  • 代码优雅写法之主干逻辑

    扯淡 好的代码 更多的也是为了后期维护,哪怕后期不需要你来维护 ,清晰干爽的代码也会为作者留下好的印象并且 在工作...

网友评论

      本文标题:代码优雅写法之封装

      本文链接:https://www.haomeiwen.com/subject/dwrqjctx.html