如何使用单一责任原则

时间:2018-08-30 10:54:53

标签: c++ c single-responsibility-principle

我试图理解c ++中的设计原理。

在数据库中,我有用户。

users:
   id
   name
   age
   gender

我想通过三种方式吸引我的用户。

  • 首先:我想要所有用户。
  • 第二:我希望所有用户都按年龄过滤。
  • 第三:我希望所有用户都按年龄和性别进行过滤。

例如,如果我对getAllUsers和getFilteredByAge使用相同的类,则意味着我的类有两个责任,即负责获取用户以及对用户进行过滤。我说的对吗?在此示例中,“单一责任原则”是如何工作的,我应该将这三个人划分为不同的类,还是有更好的方法?

2 个答案:

答案 0 :(得分:2)

SRP的一个很好的定义是:

  

一个模块应该对一个演员负责,而只能对一个演员负责。

(清洁架构)

这意味着,如果告诉您这些功能的人相同,那么您可以将它们放在相同的类/模块中。

如果说getAllUsers()是会计要求的,而getUserAtLeastThisOld(int minimumAge)是人力资源要求的,那么将它们放在单独的类中可能是明智的。

答案 1 :(得分:1)

以下是您问题的答案

Q]如果我对getAllUsers和getFilteredByAge使用相同的类,这意味着我的类有两个责任吗?

A] 否,因为您班级的工作是吸引用户,所以这些功能应该是重载,并且不应位于不同的班级中。

Q]它负责获取用户并过滤用户。我对吗?

A] 我想不!过滤不是一项不同的任务,应该在检索对象之前应用它。

Q]在此示例中,单一职责原则是如何工作的,我应该将这三个职责划分为不同的类,还是有更好的方法?

A]

在这种情况下,我建议您只使用一个类,该类应具有以下函数重载

  1. GetUsers()-获取所有用户
  2. GetUsers(AgeFilter)-按年龄过滤器获取用户
  3. GetUsers(AgeFilter,genderFilter)-按年龄过滤器获取用户,并且 性别过滤器

注意:现在假设将来您要向此类添加更多功能 例如为用户计算工资,或为用户添加家庭详细信息 那么在这种情况下,您可以创建另一个班级,而不是给单个班级增加负担...