Java 在spring boot应用程序中组织服务、服务实现和存储库的最佳实践

Java 在spring boot应用程序中组织服务、服务实现和存储库的最佳实践,java,spring-boot,jpa,Java,Spring Boot,Jpa,在大多数spring引导应用程序中,都有JPA存储库、服务和服务实现。谁能解释一下 仅在需要时使用存储库 使用服务类及其应用程序。 使用服务接口并使用实现 不同的博客文章有不同的解释。寻求专家经验。1。仅在需要时使用存储库-->您应该仅在需要时创建和使用它;那很好。一般来说,除非你真的需要,否则最好不要去创造 二,。使用服务类并使用-->服务只是一个类,您可以在其中通过从存储库类(DAO数据访问对象层)获取一些数据来编写业务逻辑;将他们隔离的良好做法;因此,DAO或服务中的任何更改都不应相互影响


在大多数spring引导应用程序中,都有JPA存储库、服务和服务实现。谁能解释一下

  • 仅在需要时使用存储库
  • 使用服务类及其应用程序。
  • 使用服务接口并使用实现
  • 不同的博客文章有不同的解释。寻求专家经验。

    1。仅在需要时使用存储库-->您应该仅在需要时创建和使用它;那很好。一般来说,除非你真的需要,否则最好不要去创造

    二,。使用服务类并使用-->服务只是一个类,您可以在其中通过从存储库类(DAO数据访问对象层)获取一些数据来编写业务逻辑;将他们隔离的良好做法;因此,DAO或服务中的任何更改都不应相互影响

    三,。用户服务接口和实现,并使用实现

    一般来说,您可以根据接口编写代码;其良好的设计和编码实践;这样您就可以创建松散耦合的代码;因此,无论您在哪里使用服务,您都可以将其作为接口类型进行注入,并且可以插入和插入带有下划线的实现;当然,如果您的服务接口有多个实现。 例如,您的ShapeService接口有两个不同的实现,用于两个不同的客户机计算一个客户机感兴趣的面积,以计算重叠的面积,而另一个客户机是方形的。因此,在本例中,如果您创建服务接口及其Impl;对于要使用此服务接口的类,可以保持逻辑完整或不变。此外,在未来,如果有许多实施的形状将很容易改变;您的代码设计将对扩展开放,但对修改关闭


    我建议,如果您有单一的服务类实现,那么直接使用类,而不是创建服务接口,然后单独使用Impl类

    首先,每个设计模式都是为了解决软件开发中的一个常见问题而设计的。如果您确信在您的特定用例中不会遇到这些问题,您就不需要遵循这些模式

  • 您可以直接从控制器或任何需要的地方调用存储库。存储库应该执行基本的数据库操作,如果您只需要这些操作,那么调用它们是没有问题的

  • 但大多数情况下,您希望在使用数据库之前/之后执行一些业务逻辑。这就是服务类涉及的地方(其中一个原则是单一责任原则——您不应该在同一个类中同时拥有持久性操作和业务逻辑)。例如,调用EmployeeService.save()方法来保存员工,该方法执行业务逻辑(例如,检查员工的ID号是否正确),然后调用repository类(该类仅将员工保存在数据库中)

  • 接口和实现模式是最后一种模式的扩展。如果将来需要新的功能,拥有一个接口可以使您的应用程序更易于维护。理想情况下,大多数应用程序将调用接口,并提供适当的实现(例如,通过注入Spring组件)。例如,如果一年后您需要一个执行不同业务逻辑的特殊实现,那么您只需实现该接口并根据需要注入bean即可


  • 这就是为什么大多数开发人员通过使用存储库接口实现结构来验证他们的应用程序。如果您确定只需要基本的CRUD操作,则无需创建服务。

    谢谢您,伙计。很好的解释。将此标记为正确答案