s在固体中 - 您如何/在哪里绘制线路



,因此,单个责任原则 - 类应出于一个原因而改变,但您如何有效地判断该责任的真正是什么。简单示例:

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的责任是什么?

  1. 更新用户时会做什么?
  2. 删除用户时会做什么?
  3. 添加用户时您会做什么?

如果这些方法很简单,则它们的作用不仅仅是更新DB中的用户。也许是Usermanager的责任可能是用户质量。

或usermanager的责任更像是用户列表。如果您查看列表对象。它是否使用许多其他子类?不。如果这是您的情况,则应将UserManager重命名为用户列表对象。

在这种情况下,您不确定SRP原则的主要原因是因为单词管理器并不意味着任何具体的内容。尝试找到一个更好的名字,您会找到答案。如果您的班级需要访问更多特定的对象,它将以名称显示。

此外,您的单位测试应有助于识别问题。单位测试是揭示这种谜团的好方法。

另外,没有纯粹主义者会超越建筑师的那种问题;)请记住,过早的优化是所有弊端的根源。

最新更新