如何使用单一职责原则
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,它应该有以下函数重载
- GetUsers() - 获取所有用户
- GetUsers(AgeFilter) - 根据年龄过滤器获取用户
- GetUsers(AgeFilter, genderFilter) - 根据年龄过滤器获取用户和
性别过滤器
注意:现在假设您将来想为此添加更多功能 class
例如计算用户的薪水,或为用户添加家庭详细信息
那么在这种情况下,您可以创建另一个 class 而不是给单个 class...
增加负担
SRP 的一个很好的定义是:
A module should be responsible to one, and only one, actor.
(干净的架构)
这意味着,如果告诉您这些函数的作用的人是同一个人,那么您可以将它们留在同一个 class/module。
如果,比方说,getAllUsers()
是会计要求的,getUserAtLeastThisOld(int minimumAge)
是人力资源部要求的,那么将它们分开 类 可能是明智的。
我正在尝试理解 C++ 中的设计原则。
在数据库中我有用户。
users:
id
name
age
gender
我想通过三种方式获取用户。
- 第一:我想要我所有的用户。
- 第二:我希望我的所有用户都按年龄过滤。
- 第三:我希望按年龄和性别过滤我的所有用户。
例如,如果我对 getAllUsers 和 getFilteredByAge 使用相同的 class,这意味着我的 class 有两个职责,它负责获取用户并负责过滤用户。我对不对?单一职责原则在这个例子中是如何工作的,我应该把这三个拆分成不同的 classes,还是有更好的方法?
以下是对您问题的回答
问] 如果我对 getAllUsers 和 getFilteredByAge 使用相同的 class,是否意味着我的 class 有两个责任?
A] 不,因为你的class的工作是获取用户,而这些功能应该是重载,不应该在不同的class中。
Q]它负责获取用户,也负责过滤用户。我说的对不对?
A] 我想不!过滤不是一项不同的任务,它应该在检索对象之前应用。
问] 单一职责原则在这个例子中是如何工作的,我应该把这三个拆分成不同的 classes,还是有更好的方法?
一个]
在这种情况下我建议你只有一个class,它应该有以下函数重载
- GetUsers() - 获取所有用户
- GetUsers(AgeFilter) - 根据年龄过滤器获取用户
- GetUsers(AgeFilter, genderFilter) - 根据年龄过滤器获取用户和 性别过滤器
注意:现在假设您将来想为此添加更多功能 class 例如计算用户的薪水,或为用户添加家庭详细信息 那么在这种情况下,您可以创建另一个 class 而不是给单个 class...
增加负担SRP 的一个很好的定义是:
A module should be responsible to one, and only one, actor.
(干净的架构)
这意味着,如果告诉您这些函数的作用的人是同一个人,那么您可以将它们留在同一个 class/module。
如果,比方说,getAllUsers()
是会计要求的,getUserAtLeastThisOld(int minimumAge)
是人力资源部要求的,那么将它们分开 类 可能是明智的。