类 CRUD 方法违反了单一职责原则?

classes with CRUD methods violating Single Responsibility principle?

我想了解单一职责原则。我有以下问题。

  1. 单一职责原则 (SRP) 规定永远不应该有 class 改变的原因不止一个。 通常我们的资源、服务和存储库 classes 有 创建、读取、更新和删除方法。我们正在将每个 class 更改为 修改任何这些操作的代码。是否违反 SRP?我们需要 每个动作分开 class?

  2. 当我 运行 sonar lint 时,我看到了以下消息。

    类 不应该耦合太多其他 classes.

    这里我使用 spring DI 注入其他 classes。有没有限制 依赖项数量?

我可能错过了这个概念的关键。请建议一个很好的资源,以便通过示例更好地理解这个概念

The Single Responsibility Principle (SRP) states that there should never be more than one reason for a class to change.

单一职责原则并不意味着 component/class 的单一方法或单一类型的操作。
意思是一个事情范围内的单一责任.

持久化操作也是同样的事情。
所以把它们全部放在一个class中并不违反必要的原则。

现在,如果您有许多特定的数据库操作,将它们分成不同的 class 是有意义的,它们具有明确定义的职责,例如选择操作、更新操作等。

Usually our Resource,Service and Repository classes have create,read,update and delete method. We are changing each class to modify code for any any of these operations. Is it violating SRP?

这些是不同的层。
如果您更改一个层的模型,当数据在层之间传递时,其他人通常会受到影响。
这就像如果你在你的数据库中添加一个信息,你需要改变你的 GUI 和你的处理,如果你想要 see/manipulate 它们。

现在,如果您更改层的实现,其他层应该没有或很少有影响。

SRP 指出 class 应该只做一件事,比如存储库中的持久化实体。我猜你在这里混淆了 "class" 和 "object":如果你有几种方法可以改变 object 的状态,这可能与建议零售价。然而,存储库 class 更改的唯一原因应该与其目的有关,即在这种情况下持久化或检索实体。

关于 Single Responsibility Principle 的维基百科文章说得很好。

关于你的第二点:不存在 class 可以拥有的最大依赖项数量,但如果存在很多依赖项,则可能是设计缺陷的标志。