Agile Principles Patterns Practices in C# (8)

SOLID - 單一職責原則

Posted by Jasper & Ken on Thursday, December 8, 2022

TOC

Singel Responsibility Principle

單一職責原則 一個類別應該只有一個發生變化的原因

1. 範例說明

  • Rectangle 具有兩個方法,分別負擔以下兩個工作

    • draw(): 把舉行繪製在螢幕上
    • area(): 計算矩形的面積
  • 有兩個不同的應用程式會使用到Rectangle類別

  • 這個設計違反了單一職責原則,不同的職責建立在同一個類別中。

  • 導致了設計上的耦合,在未來修改或維護時,可能會導致不可預期的方式失敗。

  • 將職責分離到兩個不同的類別中,不同的功能間不再互相影響

2. 定義職責

  • 可將職責是為 變化的原因
  • 有多於一個的動機去改變一個類別,那麼這個類別就有多於一個的職責
  • 若是城市的變化方式總是導致這兩個職責的變化,則不需要去分離,分離容易產生不必要的複雜性臭味

3. 分離耦合的職責

  • 如上述Modem 類別的例子,已經透過解偶合的方式執行分離介面,已不會對其他部分的程式造成汙染

4. 持久化 (Persistence)

  • Employee 類別包含了業務規則與對於持久化的控制
  • 業務規則往往會頻繁變化,而持久化的方式通常不會頻繁變化
  • 大多數情況,絕不該混合在一起
  • 透過TDD的開發模式,可以在設計出現臭味之前,就迫使我們分離這兩個職責
  • 可以使用FACADE(外觀模式)、DAO(資料存取物件)、Proxy(代理模式) 進行重構,來分離這兩個職責

4. 總結

  • SRP 是所有原則中最簡單的原則之一,也是最難正確運用的原則之一。我們會很自然地就把職責結合在一起。軟體設計真正要做的許多工作,就是發現職責。並把那些職責相互分離。事實上,我們將要論述的其他原則,都會以這樣或那樣的方式回到這個問題上。