如何使用单一职责原则

How to use Single-Responsibility Principle

我正在尝试理解 C++ 中的设计原则。

在数据库中我有用户。

users:
   id
   name
   age
   gender

我想通过三种方式获取用户。

例如,如果我对 getAllUsers 和 getFilteredByAge 使用相同的 class,这意味着我的 class 有两个职责,它负责获取用户并负责过滤用户。我对不对?单一职责原则在这个例子中是如何工作的,我应该把这三个拆分成不同的 classes,还是有更好的方法?

以下是对您问题的回答

问] 如果我对 getAllUsers 和 getFilteredByAge 使用相同的 class,是否意味着我的 class 有两个责任?

A] 不,因为你的class的工作是获取用户,而这些功能应该是重载,不应该在不同的class中。

Q]它负责获取用户,也负责过滤用户。我说的对不对?

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

问] 单一职责原则在这个例子中是如何工作的,我应该把这三个拆分成不同的 classes,还是有更好的方法?

一个]

在这种情况下我建议你只有一个class,它应该有以下函数重载

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

注意:现在假设您将来想为此添加更多功能 class 例如计算用户的薪水,或为用户添加家庭详细信息 那么在这种情况下,您可以创建另一个 class 而不是给单个 class...

增加负担

SRP 的一个很好的定义是:

A module should be responsible to one, and only one, actor.

(干净的架构)

这意味着,如果告诉您这些函数的作用的人是同一个人,那么您可以将它们留在同一个 class/module。

如果,比方说,getAllUsers() 是会计要求的,getUserAtLeastThisOld(int minimumAge) 是人力资源部要求的,那么将它们分开 类 可能是明智的。