敏捷開發大家談(五)--敏捷開發的設計原則

pharos發表於2019-05-14
二、敏捷開發的設計原則

關於敏捷開發的設計原則:
單一職責原則SRP:Single Responsibility Principle
開放封閉原則OCP:Open-Close Principle
Liskov替換原則LSP:Liskov Substitution Principle
依賴倒置原則DIP:Dependency Invertion Principle
介面隔離原則ISP:Interface Separate Principle
關於包的設計原則:
重用釋出等價原則REP:Reuse Equivalence Principle
共同重用原則CRP:Common Resue Principle
共同封閉原則CCP:Common Close Principle
無環依賴原則ADP:Acyclic Dependency Principle
穩定依賴原則SDP:Stabilization Dependency Principle
穩定性度量公式:I=Ce/(Ca+Ce) (I:不穩定度,Ce:輸入耦合度,Ca:輸出耦合度)
I取值範圍在【0,1】,I=0表示具有最大穩定度;iI=1標識具有最大不穩定度
穩定抽象原則SAP:Stabilization Abstract Principle

 

GOF說--基於物件組合的設計會有更多的物件(而有較少的類)。
如果單純的看這裡,你會明白似乎類較少符合物件導向的邏輯。
但是且慢,我們知道物件導向有一條原則叫單一職責原則--SRP。
這樣好像類多又是物件導向思想的體現。
其實最重要的是GOF中的這句話--且系統的行為將依賴物件間的關係而不是被定義在某個類中。
所以類的多少並不是問題的關鍵,是否職責單一也不是大問題,
最重要的是你現在的那些職責是都多少是不能被別的職責通過某種方式所代替的。
在BOB大叔那裡定義職責是變化的原因,因此就可以認為這些變化的原因應該是不可代替的,
也可以說你不能由這個原因推匯出別的原因。
只要這個原因間可以做到相互關聯,那麼你就可以把由於這些變化而引起變化的類組合起來,
而不是把他們規定在新的類中。


開放封閉原則OCP:Open-Close Principle

一個模組在擴充套件性方面應該是開放的而在更改性方面應該是封閉的。

因此在進行物件導向設計時要儘量考慮介面封裝機制、抽象機制和多型技術。

該原則同樣適合於非物件導向設計的方法,是軟體工程設計方法的重要原則之一。

我們以收音機的例子為例,講述物件導向的開閉原則。

我們收聽節目時需要開啟收音機電源,對準電臺頻率和進行音量調節。

但是對於不同的收音機,實現這三個步驟的細節往往有所不同。

比如自動收縮電臺的收音機和按鈕式收縮在操作細節上並不相同。

因此,我們不太可能針對每種不同型別的收音機通過一個收音機類來實現(通過過載)這些不同的操作方式。

但是我們可以定義一個收音機介面,提供開機、關機、增加頻率、降低頻率、增加音量、降低音量六個抽象方法。

不同的收音機繼承並實現這六個抽象方法。

這樣新增收音機型別不會影響其它原有的收音機型別,收音機型別擴充套件極為方便。

此外,已存在的收音機型別在修改其操作方法時也不會影響到其它型別的收音機。
圖1是一個應用OCP生成的收音機類圖的例子:

Liskov替換原則LSP:Liskov Substitution Principle

子類應當可以替換父類並出現在父類能夠出現的任何地方。

我們以學生為例,夜校生為學生的子類,因此在任何學生可以出現的地方,夜校生均可出現。

這個例子有些牽強,

一個能夠反映這個原則的例子時圓和橢圓,圓是橢圓的一個特殊子類。

因此任何出現橢圓的地方,圓均可以出現。但反過來就可能行不通。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3433/viewspace-269190/,如需轉載,請註明出處,否則將追究法律責任。

相關文章