單一職責原則SRP (Single reponsibility principle) BO(Business Object) :業務對象 Biz(Business Logic) :業務邏輯 SRP最簡單的例子:用戶信息維護類 單一職責原則SRP定義 應該有且僅有一個原因引起類的變更。( 一個介面只有 ...
單一職責原則SRP(Single reponsibility principle)
BO(Business Object):業務對象
Biz(Business Logic):業務邏輯
SRP最簡單的例子:用戶信息維護類
單一職責原則SRP定義
應該有且僅有一個原因引起類的變更。(一個介面只有一個職責)
SRP例子:電話通話過程
電話通話的過程:撥號、通話、回應、掛斷。
如果按照一定職責進行劃分:可以分為協議管理和數據傳送。
協議管理:撥號和掛機。
數據傳送:通話.
這個類中包含兩個職責,但是撥號和掛機與通話互不影響相互獨立(即撥號就是撥號,掛機就是掛機,他們兩個在執行完後,進行通話,並不會再產生影響。)。此時該類可以進一步優化為兩個職責即劃分為兩個介面。
組合關係:虛線箭頭,整體與部分的關係,菱形指向整體部分,部分不能離開整體。(電話由協議部分和數據傳送兩部分構成,任何一個單獨存在都不能使用)
實現關係:虛線空心箭頭,類實現介面。
依賴關係:菱形箭頭,使用關係:類的實現需要另一個類的協助。(數據傳輸的過程需要進行撥號和掛斷)
組合關係是一種強耦合關係,由此劃分會多出兩個類,增加類的複雜性,因此可以才用面向介面編程重新設計此類圖。
SRP優點
- 類的複雜性降低,實現的職責有了清晰的定義。
- 可讀性提高。
- 可維護性提高。
變更引起的風險降低。
SRP存在的問題
- SRP標準不同導致,職責可以有多種劃分方法。單一職責劃分提出了編寫程式的標準,用職責和變化原因衡量,介面設計的優良,但是由於不同項目而導致的度量標準也是不同的。
SRP不能過分細分,否則會導致類的劇增,增加維護成本。
SRP應用範圍
介面、類、方法。
SRP應用到方法中,每個方法的職責明確清晰。
如圖,此方法根據參數類型進行綁定到userBo進行相關操作。即一個方法承擔了多個職責。
改進後:一個方法承擔一個職責
SRP總體要求
介面一定要做到單一職責,類的的設計儘量做到單一職責