一直想找看看有沒有更加簡單好懂,更為基本的原則,當做程式設計時核心理念。
看過 SOLID,讀過 Clean Code,在實戰中不斷的練習。研究設計模式 (Design Pattern),但是複雜解決方案不一定能夠派上用場。
看到 Kent Beck 提出四個「簡單設計 (Simple Design)」規則,心中覺得這個就是我最近在尋找的東西。
Kent Beck 的四個「簡單設計 (Simple Design)」規則
- Runs all the tests
- 通過所有的測試
- Has no duplicated logic. Be wary of hidden duplication like parallel class hierarchies
- 沒有重複的邏輯,注意隱藏的重複程式例如併行的類別階層結構
- States every intention important to the programmer
- 對程式設計師說明每個重要的意圖
- Has the fewest possible classes and methods
- 盡可能使用最少量的類別跟方法
Martin Fowler 的四個「簡單設計」規則
Martin Fowler 以更加簡潔版本來表達這四個規則
- Passes the test: 通過所有測試
- Reveals intention: 程式碼本身要展現其意圖
- No duplication: 沒有重複性的程式
- Fewest elements: 使用最少的元素
除了這兩為大師級的分享之外,還有許多討論跟不同版本的描述
首先這四個原則是有優先順序的!! 但是不管是哪個版本,第一個都會是「通過所有測試」
Passes the test: 通過所有測試
Extreme Programming 把「測試」的地位變成軟體開發最首要的行為。讓「測試」告訴你有沒有完成目標,並確保程式如預期工作。
如果一個系統不能正常運作或是無法確定它能不能正常運作,會降低它的價值增加工程師的壓力。
Reveals intention: 程式碼本身要展現其意圖
程式碼是給人看的,好的程式碼是要在閱讀的時候覺得好讀好懂。 要容易理解程式碼的關鍵是在程式碼本身要展現出它的意圖,如同 Self Documenting Code,程式碼本身就是自己最好的文件。
No duplication: 沒有重複性的程式
類似的概念有: DRY (Don’t Repeat Yourself), Once and only once, SPOT (Single Point Of Truth),都是在說相同的程式碼只會出現一次。
除了程式碼,其他不管是概念還是功能等等重複,也都需要被避免。而練習減少重複程式更是產生優良設計的好方法。
Fewest elements: 使用最少的元素
類似的概念: YAGNI (You aren’t gonna need it)。
有一些設計建議會要求在現有架構上增加一些元素,想要提高對未來需求的靈活性,但是額外的複雜性並不一定能夠派上用場,還會讓系統難以修改。 因此只加入需要的程式,不做多餘的設計,才是好的設計。
總結
Kent Beck 提出的「簡單設計」原則,簡單好記,適用在各種情況,又足夠影響我們的程式設計思緒。