2018年1月13日 星期六

Clean code summary

  • 命名特殊字母與數字需避免使用 EX: 零與O
  • 命名必須清楚,避免使用類似的同義詞 EX: productData & productInfo 卻代表不同意
  • 無須再用自首prefix ex: m_book
  • 類別與物件用名詞命名
  • 方法用動詞或動詞片語 ex: deletePage,判斷情況應用is開頭 ex: isMoved
  • 函式盡量簡短,每個函式只做一件事,若需做其他事需在名稱上寫清楚
  • 程式碼由上而下敘事
  • Switch 只可出現在產生多型物件,故就只會有一次
  • 函式參數不可多,需避免超過三個,函式名稱要和參數形成動詞+名詞配對 ex: writeField(string name)
  • 用exception 取代回傳錯誤碼
  • 註解無法彌補糟糕的程式,而且可能因為沒同步修改造成誤解
  • 日誌型或修改異動註解 已經註解程式碼現今已可用git 取代,都不再需要
  • 不要回傳null
  • 傳入參數有異動最好回傳出來並用函式名稱說明清楚
  • 單元測試一次測一個Assert 一個概念
  • 整潔的測試原則
    • Fast:可快速執行
    • Independent:不該相互依賴,不該成為其他測試的條件
    • Repeatable:任何環境都可重複執行
    • Self Validating:測試程式應輸出Boolean,不用手動比較結果
    • Timely(即時)
  • 類別簡短,用職責數量為單位計算,單一職責
  • 類別名稱含糊表示職責不清Ex: manager
  • Dependency Injection 是IoC (Inversion of control)在相依性管理的一種手段,將某物件的第二職責移至其它專注於該職責的物件裡,也支援了單一職責原則。
  • 簡單設計守則:執行完所有測試、程式重構(禁止重複、具表達力、最小化類別與方法數量)
  • 保持平行化相關程式(多執行緒)與其他程式有清楚劃分
  • Multi thread 防禦原則:
    • 限制資料視野 用synchronized ,但synchronized區塊內程式需簡短
    • 複製物件並讓他變為唯讀
    • 控制共享資料數量,盡可能獨立運行執行緒,與其他執行緒不共享資料,資料都區域變數
    • Java相關類別:java.util.concurrent,java.util.concurrent.atomic,java.util.concurrent.locks ex:CountDownLatch 用於在釋放所有等待這個鎖的執行緒之前,這個鎖會先等待指定數量的事件。使得所有執行緒都有機會同時啟動。
    • ReentrantLock 一個被A方法取得,在B方法釋放的鎖
  • 避免從一個鎖定區域呼叫另一個鎖定區

沒有留言:

張貼留言