好的代碼 更多的也是爲了後期維護,哪怕後期不須要你來維護 ,清晰乾爽的代碼也會爲做者留下好的印象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