【讀書筆記】AgilePPP——敏捷設計
•全局視圖和軟件一起演化
•設計儘可能適合當前系統,關注當前系統結構
•增量地演化出系統最佳架構和設計
•設計和架構過程是持續不斷進行的
•從根本上講,源代碼就是設計
•敏捷設計是一個過程,不是一個事件,是一個持續的應用原則、模式以及實踐來改進軟件結構和可讀性的過程
•敏捷設計步驟
–遵循敏捷實踐去發現問題
–應用設計原則去診斷問題
–應用適當模式去解決問題
•設計臭味
–僵化性(rigidity)——連鎖改動
–脆弱性(fragility)——耦合、易遭破壞
–頑固性(immobility)——難以重用
–粘滯性(viscosity)——難以做正確的事情
–不必要的複雜性(needlesscomplexity)——過度設計
–不必要的重複(needlessrepetition)——忽略抽象
–晦澀性(opacity)——難以理解
•內聚性
–一個模塊的組成元素之間的功能相關性
•SRP
–一個類應該只有一個發生變化的原因,及一個類應該只有一個職責
•職責
–發生變化的原因
–需求變化反應爲職責的變化
•軟件設計,就是要發現職責,並把它們相互分離
•封閉是建立在抽象的基礎之上的
•只受一次愚弄
•刺激變化:測試驅動、快速交付
•正確判斷各種變化的可能
•一直等到變化發生時才採取行動
•OCP是面向對象設計的核心所在
•拒絕不成熟的抽象和抽象本身一樣重要
•OCP背後的主要機制是抽象和多態
•有經驗的設計人員希望自己對用戶和應用領域很瞭解,能夠以此來判斷各種變化的可能性。然後,他可以讓設計對於最有可能發生的變化遵循OCP原則
•子類型必須能夠替換掉它們的基類型,替換後,程序的行爲功能不變
•一個自相容的設計未必就和所有的用戶程序相容
•一個模型的有效性只能通過它的客戶程序來表現
•在考慮一個特定設計是否恰當時,不能完全孤立的來看這個解決方案,必須根據該設計的使用者所作出的合理假設來審視它(這些合理的假設常常以斷言的形式出現在爲基類編寫的單元測試中)
•違反LSP往往是很微妙的
•LSP清楚的指出,OOD中的IS-A關係是就行爲方式而言的,行爲方式是可以進行合理假設的,是客戶程序所依賴的。
•使用基於契約的設計可以使LSP明確化
•基於契約的設計
–在重新聲明派生類的例程中,只能使用相等或更弱的前置條件,只能使用相等或更強的後置條件
–若違反了這條原則,則必定違反LSP原則
•爲每個方法的註釋添加前置和後置條件
•通過單元測試來指定契約
•DIP
–高層模塊不應該依賴底層模塊,二者都應該依賴於抽象
–抽象不應該依賴於細節。細節應該依賴於抽象
•框架設計的核心原則
•DIP解析
–高層模塊即客戶端或使用方,底層模塊即服務端
–應由使用方提出所需的接口,由服務方來實現這些接口的具體功能
–因此軟件開發的過程應該是自上而下的
•抽象接口歸客戶端所有
•不應該強迫客戶程序依賴它們並不使用的方法/接口。
•分離客戶就是分離接口。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.