代碼優雅寫法之封裝

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

相關文章
相關標籤/搜索