,因此,单个责任原则 - 类应出于一个原因而改变,但您如何有效地判断该责任的真正是什么。简单示例:
public class UserManager
{
public void AddUser() { }
public void RemoveUser() { }
public void UpdateUser() { }
}
可以说,其中任何一个都会破坏SRP。因此,您最终将DI用于其中两个,最终得到了:
public class UserManager
{
private UserRemover _remover;
private UserUpdater _updater;
public UserManager(UserRemover remover, UserUpdated updater)
{
_remover = remover;
_updater = updater;
}
public void AddUser() { }
public void RemoveUser() { }
public void UpdateUser() { }
}
如果还有更多与用户管理有关的方法怎么办?会走那条路并继续通过构造函数中的其他依赖项吗?对于任何具有多个公共方法的班级,都可以说它破坏了SRP。您是使用常识并与选项一个或纯粹主义者一起使用,并与选项二一起使用?
单个责任原理
a。Usermanager的责任是什么?
- 更新用户时会做什么?
- 删除用户时会做什么?
- 添加用户时您会做什么?
如果这些方法很简单,则它们的作用不仅仅是更新DB中的用户。也许是Usermanager的责任可能是用户质量。
或usermanager的责任更像是用户列表。如果您查看列表对象。它是否使用许多其他子类?不。如果这是您的情况,则应将UserManager重命名为用户列表对象。
在这种情况下,您不确定SRP原则的主要原因是因为单词管理器并不意味着任何具体的内容。尝试找到一个更好的名字,您会找到答案。如果您的班级需要访问更多特定的对象,它将以名称显示。
此外,您的单位测试应有助于识别问题。单位测试是揭示这种谜团的好方法。
另外,没有纯粹主义者会超越建筑师的那种问题;)请记住,过早的优化是所有弊端的根源。