Java 单一责任和方法

Java 单一责任和方法,java,software-design,solid-principles,code-cleanup,clean-architecture,Java,Software Design,Solid Principles,Code Cleanup,Clean Architecture,我想我可以在这里回答我自己的问题,但假设我理解SRP在方法层面上的意思是一个方法只起一个作用。如果我有一些方法,每个方法分别覆盖类中的一个特定角色,但是一个方法使用了大量这些方法来完成一个角色,比如save(),那么所有的方法都会遵守SRP吗 以下是一个例子: public void saveCertificationToDB(Cert cert){ if(certificateIsNotExpired(cert){ setCertProperties(cert);

我想我可以在这里回答我自己的问题,但假设我理解SRP在方法层面上的意思是一个方法只起一个作用。如果我有一些方法,每个方法分别覆盖类中的一个特定角色,但是一个方法使用了大量这些方法来完成一个角色,比如save(),那么所有的方法都会遵守SRP吗

以下是一个例子:

public void saveCertificationToDB(Cert cert){
  if(certificateIsNotExpired(cert){
      setCertProperties(cert);
      openConnectionToDB();
      overwriteCertificateInDB(cert);
      closeConnectionToDB();
      notifyUserSaveSuccessful();
      }
 }

单一责任原则:

没有具体的规则,只是SRP是一个指南。但是如果你想为SRP思考,那么你应该始终牢记在心

更改类、函数等代码块的唯一原因

但是,根据给定的函数,有很多理由更改函数代码块

例如:

如果属性设置函数因任何原因修改,则必须更改您的saveCertificationToDB()

同样,如果其他调用函数因任何其他原因发生任何更改,则您的saveCertificationToDB()也需要更改


因此,一般来说,有很多缺陷主要是基于观点的;没有硬性规定。但是,其中包含“DB”的3个方法调用似乎应该位于方法名称
saveCertificationToDB
似乎适用的方法中。上面显示的方法可以称为
validateAndSaveCertificationAndNotifyUser()
——尽管通常情况下,用户通知通常位于应用程序的一个完全不同的层中(但您可以在这个级别上有一个更通用的回调)——这取决于具体情况。