"Design-Principles"
- Single Responsibility Principle(單一職責原則)
要判斷一個模組、類別或文件該不該拆,或讀到「一個類別只做一件事」這種說法時:單一職責的定義是改變的理由,理由以改動的種類計數,提出變更的人用來辨認種類
- 從修改紀錄畫模組邊界:修改競爭、熱點的量測與分類、職責歸類、拆分時維持行為的做法、拆分時機與拆完的驗證
用 git 歷史統計每個檔案被幾個不同的需求修改、把結果當成單一職責的間接量測,修改熱點的分類與處理,逐個 commit 把需求歸到職責以決定切法,拆分時與語言無關的做法(特徵測試、搬移與修改分開提交、單向依賴),以及拆分合併的時機與拆完之後的驗證;量測只讀版本歷史,與程式語言無關
- Divergent Change(發散式變更)
同一個模組總是因為不相干的需求被修改、或並行開發的人一直在同一個檔案上等待彼此時:這是違反單一職責原則在修改紀錄上的樣子
- Shotgun Surgery(散彈式修改)
每做一個小變更都要同時改好幾個檔案、漏改一處就出錯,或依行數拆完檔之後同一個主題的修改散到好幾份時:這是同一個改變理由被拆散到多個模組的壞味道
- Open-Closed Principle(開放封閉原則)
要在新增一種格式、一種類型或一種規則時不必改動既有程式碼,或要判斷一個擴充點值不值得先做時:模組對選定的那一類變更封閉,靠的是使用端只依賴一個固定的抽象
- DRY(Don't Repeat Yourself)
看到兩段長得一樣的程式碼想合併、或同一條規則改了一處而另一處忘了改時:DRY 管的是知識的重複,判斷兩段程式碼該不該合併要看它們是不是因為同一個理由改變
- Cohesion(內聚)
要判斷一個模組裡的元素放在一起的理由夠不夠強、或讀到「高內聚、低耦合」想知道內聚量的是什麼時:內聚是模組內部元素彼此相關的程度,依放在一起的理由分成由弱到強的幾種
- Coupling(耦合)
改一個模組總是連帶要改另一個、或要判斷兩個模組之間的依賴可不可以接受時:耦合是模組之間互相依賴的程度,依兩個模組共享什麼分成由強到弱的幾種