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