筆記:
軟體開發方法論:
Test-driven development (TDD,測試驅動開發)
Behaviour-driven development (BDD,行為驅動開發)
Domain-driven development (DDD,領域驅動開發)
Type-driven development (型別驅動開發)
Property-driven development (特性驅動開發)
封裝
描述物件和呼叫者之間有效互動的一種契約。指出有效性的一種方式是說明什麼是無效的。
Design by Contract
封裝的想法:你應該能夠與一個物件進行互動而不需要對它的實作細節有深入的了解。這目的有 2 個:
1. 它使你能夠改變實作,也就是進行重構。
2. 它允許你以抽象的方式思考一個物體
在設計時要明確指出哪些是有效的輸入,哪些是無效的輸入,以及你能對輸出提供哪些保證
Martin Fowler:如果不關注內部品質,你很快就會失去在合理時間內進行改善的能力。
內部品質差勁的狀況。起初進展很快,但隨著時間的推移,要增加新的功能變得越來越困難。即使是小型的變更,也需要程式設計師去了解大面積的程式碼,而且是很難理解的程式碼。
當他們進行改動時,會出現意想不到的損害,導致測試時間長,還有需要修復缺陷
Page 51
J.B. Rainsberger 的說法:程式碼不是一種資產,而是一種責任。
Page 98
參數化的測試
Page 112
Postel' Law
慎重考慮先決與後置條件:對你發送出去的東西要保守,對你所接受的東西則要寬容。
輸入 null,轉換為空字串
Page 117
試圖用1個無效的人數初始化某個物件,應該要丟出1個例外。+
Page 119
封裝的概念:
並不是禁止直接對外開放類別的欄位:類別的欄位應該被「封裝」在 getXX 和 setXXX。
主要是 1 個物件應該保證它永遠不會處於無效的狀態。這不是呼叫者的責任。物件最清楚「有效」意味者什麼,以及如何做出這種保證。
物件和呼叫者之間的互動應該遵守一個契約。這是一組先決條件和後置條件。
先決條件述述了呼叫者的責任。然後,如果呼叫程式碼履行了那些義務
後置條件就描述了物件所給予的保證。
No comments:
Post a Comment