由于违反单一责任原则(SRP),Spring应用程序的设计可能存在缺陷

由于违反单一责任原则(SRP),Spring应用程序的设计可能存在缺陷,spring,single-responsibility-principle,Spring,Single Responsibility Principle,我目前正在学习坚实的原则,尤其是SRP 为了更好地理解这一原则,我记得不久前曾处理过一个小型应用程序,它有一个Spring服务类,包含整个应用程序的所有服务方法 此外,它有一个包含所有jpa数据访问方法的DAO类 这显然违反了SRP。是吗?好吧,是和否,这里的想法是,如果一个类只有一个“变化轴”(必须喜欢马丁的行话),那么它就是“SRP批准的”。用凡人的话来说,这意味着:“这个阶级改变的原因不止一种吗?”。也就是说,如果您的服务类实际上聚合了(比方说)逻辑,该逻辑将调用其他服务并对该服务调用返回

我目前正在学习坚实的原则,尤其是SRP

为了更好地理解这一原则,我记得不久前曾处理过一个小型应用程序,它有一个Spring服务类,包含整个应用程序的所有服务方法

此外,它有一个包含所有jpa数据访问方法的DAO类


这显然违反了SRP。是吗?

好吧,是和否,这里的想法是,如果一个类只有一个“变化轴”(必须喜欢马丁的行话),那么它就是“SRP批准的”。用凡人的话来说,这意味着:“这个阶级改变的原因不止一种吗?”。也就是说,如果您的服务类实际上聚合了(比方说)逻辑,该逻辑将调用其他服务并对该服务调用返回的内容执行一些业务逻辑,那么该服务类将有两个更改轴:一个用于它调用的服务何时/是否会更改,另一个用于业务逻辑何时更改。在这种情况下,调用其他服务的部分应该与将业务逻辑应用于返回结果的部分分开

然而,这些东西被称为“原则”,而不是“法律”,因为它们不应该一直盲目地应用于你所开发的任何东西(以免你发疯),而是只有在上下文需要的时候


例如,Martin Fawler自己将模型(作为JavaBeans)和DAO对象分离视为他调用的反模式。作为一个很好的替代方法,请参见。然而,我相信您和其他许多人在用Java构建数据访问层时确实已经实现了bean/dao分离,代码本身是干净的、可用的和灵活的

可能吧。除非这个应用做得很少。