2020年4月26日 星期日

The Clean Code Talks - "Global State and Singletons" 整理

重點整理:
  • 全域狀態(Global State)會有幾個問題:測試時每次結果不一樣(Flakiness);測試時必須有順序;某些測試無法平行進行
  • 單例(Singleton)封裝了全域狀態
  • 有全域狀態的程式會變得很難測試
  • 單例直接或間接碰到的變數或狀態,理論上會變成無限多個
  • 測試無法觸及實例化的單例中的私有變數,只能寫專門測試的方法來測
  • 單例(Singleton)容易產生欺騙性的API
  • 欺騙性的API獨立測試會產生許多問題,必須回溯並解決相依類別
  • 相依類別間沒有明顯的順序性,讓最佳化效能或流程增加許多阻礙或負擔
  • 有依賴注入(Dependency Injection),測試目標類別初始化與其相依類別的順序會很清楚,後續開發者看到程式碼很容易了解類別初始化的流程。
  • 依賴注入強制編譯時期初始化的順序
  • 每一個相依類別可以獨立測試
Q&A重點整理:
  • 不要混淆業務邏輯與物件初始化
  • 只有需要用到相依物件的物件才知道相依類別,其他層不會知道
  • 依賴注入讓類別間的相依明確,若一個類別初始化時吃太多參數,也許是這個類別負責太多事情,最好將它拆開成不同類別
  • 某些情況,例如框架強制無參數的建構子,導致無可避免地使用單例,則委派某個單例類別專門處理這些事情,用最少的力氣去處理它
  • 每個物件應該知道它直接合作的物件,間接需要的物件不應該知道
  • 當一個應用程式需要多個實例來執行不同的任務,全域變數會阻礙這樣的可能性
  • 即使一個環境有許多全域變數,能避免使用它可以讓程式更容易測試

沒有留言:

張貼留言