單一責任SRP設計舉例 - macerub
單一責任/職責原則(SRP):“一個模組應該只承擔一個責任”。
示例:客戶Customer類。
- generateInvoice:計算客戶必須支付的金額。
- computeDiscount:為客戶返回%折扣。
- save:將客戶儲存在資料庫中。
- toString:將客戶作為字串返回,以便可以將其新增到報表中
這個類有多少職責?為了找出答案,我們應該問自己:
- 每種方法的受眾是誰?
- 誰可能要求更改這些方法的系統使用者(參與者)?
分析結果如下,有三種方向的職責:
- 業務專家或高管(定義業務規則)可以更改發票/折扣的計算方式。
- 建築師(定義資料庫)可能會更改資料庫架構,從而影響“save”。
- 職員(與客戶打交道)可能想要更改報告,從而影響“ toString”。
多種職責混合在一起的潛在問題:想一下,高管們改變了關於發票和折扣的政策。開發人員將不得不更改Customer類。如果他們引入了錯誤,那麼架構師和文員(不要求更改)可能會受到影響。
一個問題:想一下,職員和架構師都要求更改。一個開發人員可以被分配執行職員更改的任務。另一位開發人員可能會處理架構師的更改。兩者將在同一個模組上工作,互相踩腳趾。
總結:
- 單一責任就是僅為一名參與者提供服務的程式碼。
- 一個參與者代表著單一的變化源。
- 改變的原因之一就代表一項職責或責任。
單一職責的發現與分析思維有關:
相關文章
- 設計模式 - 單一職責設計模式
- 設計模式 —— 責任鏈模式設計模式
- 設計模式(責任鏈模式)設計模式
- 設計模式-責任鏈模式設計模式
- 設計模式(三) 責任鏈模式設計模式
- 設計模式之責任鏈模式設計模式
- 設計模式之——責任鏈模式設計模式
- 利用責任鏈模式設計一個攔截器模式
- 每天一個設計模式之責任鏈模式設計模式
- 23種設計模式(六)-責任鏈設計模式設計模式
- 設計模式應用舉例設計模式
- 設計模式(一)_單例模式設計模式單例
- 設計模式一(單例模式)設計模式單例
- JAVA設計模式之責任鏈模式Java設計模式
- 設計模式系列之「責任鏈模式」設計模式
- PHP 設計模式之責任鏈模式PHP設計模式
- 極簡設計模式-責任鏈模式設計模式
- javascript設計模式一: 單例模式JavaScript設計模式單例
- 設計模式(一)之單例模式設計模式單例
- 設計模式(四)OkHttp的責任鏈模式設計模式HTTP
- Java學設計模式之責任鏈模式Java設計模式
- 設計模式第七講-責任鏈模式設計模式
- 我的Java設計模式-責任鏈模式Java設計模式
- 一文帶你玩轉設計模式之「責任鏈」設計模式
- 設計原則之【單一職責原則】
- Laravel深入學習8 – 單一責任原則Laravel
- 使用列舉來寫出更優雅的單例設計模式單例設計模式
- 設計模式 | 責任鏈模式及典型應用設計模式
- 不得不知的責任鏈設計模式設計模式
- Rust語言之GoF設計模式:責任鏈模式RustGo設計模式
- jdbc執行DML程式設計舉例JDBC程式設計
- java設計模式其一 單例模式Java設計模式單例
- 單例設計模式單例設計模式
- 設計模式學習(一)單例模式補充——單例模式析構設計模式單例
- 設計模式之責任鏈模式——Java語言描述設計模式Java
- Go 實現常用設計模式(十)責任鏈模式Go設計模式
- 設計模式:如何優雅地使用責任鏈模式設計模式
- C#設計模式-責任鏈模式(Chain of Responsibility Pattern)C#設計模式AI