簡體   English   中英

如何使用單一責任原則

[英]How to use Single-Responsibility Principle

我試圖理解c ++中的設計原則。

在數據庫中我有用戶。

users:
   id
   name
   age
   gender

我希望以三種方式吸引用戶。

  • 第一:我想要所有用戶。
  • 第二:我希望所有用戶按年齡過濾。
  • 第三:我希望按年齡和性別過濾所有用戶。

例如,如果我對getAllUsers和getFilteredByAge使用相同的類,則意味着我的類有兩個責任,它負責獲取用戶以及過濾它們。 我是對還是不對? 單一責任原則如何在這個例子中起作用,我應該將這三個分成不同的類,還是有更好的方法?

SRP的一個很好的定義是:

一個模塊應該對一個且只有一個演員負責。

(清潔建築)

這意味着如果告訴您這些函數的功能是相同的,那么您可以將它們保留在同一個類/模塊中。

如果,假設getAllUsers()請求getAllUsers()並且HR請求getUserAtLeastThisOld(int minimumAge) ,那么將它們放在單獨的類中可能是明智的。

以下是您的問題的答案

問]如果我對getAllUsers和getFilteredByAge使用相同的類,這意味着我的班級有兩個責任?

答: 不,因為你的班級的工作是獲得用戶,而不是這些函數應該是重載而不應該在不同的類中。

問:它負責獲取用戶並過濾它們。 我是對還是不對?

A] 我猜不是!,過濾不是一個不同的任務,它是在檢索對象之前應該應用的東西。

Q]單一責任原則如何在這個例子中起作用,我應該將這三個分成不同的類,還是有更好的方法?

一種]

在這種情況下,我建議你只有一個類,它應該具有以下函數重載

  1. GetUsers() - 獲取所有用戶
  2. GetUsers(AgeFilter) - 根據年齡過濾器獲取用戶
  3. GetUsers(AgeFilter,genderFilter) - 根據年齡過濾器和性別過濾器獲取用戶

注意: 現在假設您將來想要為此類添加更多功能,例如為用戶計算工資,或者為用戶添加家庭詳細信息,那么在這種情況下您可以創建另一個類而不是為單個類加重...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM