Oop 单一责任原则(SRP)和我的服务级别

Oop 单一责任原则(SRP)和我的服务级别,oop,solid-principles,single-responsibility-principle,Oop,Solid Principles,Single Responsibility Principle,我有一个YoutubeVideoService类,它执行CRUD(创建、读取、更新和删除)操作。在我看来,创建、读取、更新和删除是类更改的四个原因。该类是否违反了单一责任原则 如果它违反了,那么我们应该有四个类,比如CreateYoutubeVideoService,ReadYoutubeVideoService,UpdateYoutubeVideoService和DeleteYoutubeVideoService。有很多类不是太过分了吗?一个方法应该有多长时间?可以说没有理由有超过两行。但在某

我有一个
YoutubeVideoService
类,它执行CRUD(创建、读取、更新和删除)操作。在我看来,创建、读取、更新和删除是类更改的四个原因。该类是否违反了单一责任原则


如果它违反了,那么我们应该有四个类,比如
CreateYoutubeVideoService
ReadYoutubeVideoService
UpdateYoutubeVideoService
DeleteYoutubeVideoService
。有很多类不是太过分了吗?

一个方法应该有多长时间?可以说没有理由有超过两行。但在某些情况下,这无疑是矫枉过正。SRP也是一样——你必须决定什么时候足够。CRUD看起来像是一组内聚的操作,它们完全适合于单个类,因为它们对相同类型的数据进行操作。

我认为您在类级别上把单责任原则看得有点极端,没有考虑内聚性

如果你遵循这条路线,你可以证明有很多类只有一个或两个方法,这反过来会增加对天空的依赖


我认为SRP的精神是尽可能地简化,但不是更多。

衡量单一责任原则一致性的一个好方法是思考有多少理由改变这门课。如果你能想出不止一个改变的理由,那很可能是违反了SRP

更改此类的唯一原因是更改基础数据结构。因此,这尊重SRP

另一方面,如果在该类中有任何其他操作(例如,在插入视频之前检查视频长度或类型),则会违反SRP,因为它可以独立于持久性层进行更改

SRP不是教条,当遵循原则时,我们必须始终小心,不要引入复杂性。根据,谈到两种责任何时应该分开:

另一方面,如果应用程序的更改方式不会导致两个职责在不同时间发生更改,则无需将它们分开。事实上,将它们分开会散发出不必要的复杂性。 如果没有症状,(…)应用SRP(或任何其他原则)是不明智的


服务类是SRP杀手。根据定义,它们是操作的集合-这与SRP相反。通常,服务的单个方法需要一些依赖性,而所有其他方法可能根本不关心这些依赖性,然后随着每个此类方法依赖性的增加,就会导致混乱。管理器、服务、存储库——从依赖关系的角度来看,这些模式是非常糟糕的。在Commands/querys/Requests世界中,您将有这3个命令和一个查询分组到一个域/目录中。这将产生更干净、更小、更易于阅读和可扩展的代码。也适用于更清洁的流程。

为什么原则的定义中没有解释这些事情?良好实践中没有硬规则。有了一些经验,您将学会平衡它们,并在每次实践中使用适当的数量,以获得易于维护和阅读的真正好的代码。我把这比作烤蛋糕。食谱列出了配料和(幸运的)如何混合。但是要烤出一个真正好的蛋糕,你需要试几次。这意味着这个原则被误解了?谢谢你发布这个问题!非常鼓舞人心!