Java 从另一个服务调用服务vs dao

Java 从另一个服务调用服务vs dao,java,dao,layer,business-logic-layer,Java,Dao,Layer,Business Logic Layer,我有用户和角色实体以及服务、DAO层。我需要UserService的角色列表 我应该从UserService使用哪一层?调用列表方法的RoleService vs RoleDAO?哪一个是常用的,为什么 调用RoleService中的list方法 角色周围的业务逻辑可能有一天会发生变化,RoleService处理的所有变化对直接调用DAO的所有代码都是无用的。通常DAO层靠近数据库,服务层封装您的业务逻辑,执行任何事务或其他事情,而不仅仅是调用DAO 调用另一个服务的服务更常见,因为 您的Rol

我有用户和角色实体以及服务、DAO层。我需要UserService的角色列表


我应该从UserService使用哪一层?调用列表方法的RoleService vs RoleDAO?哪一个是常用的,为什么

调用
RoleService
中的list方法


角色周围的业务逻辑可能有一天会发生变化,
RoleService
处理的所有变化对直接调用DAO的所有代码都是无用的。

通常DAO层靠近数据库,服务层封装您的业务逻辑,执行任何事务或其他事情,而不仅仅是调用DAO

调用另一个服务的服务更常见,因为

  • 您的RoleService可以对一些业务代码进行评估,您可以从事务或通过JMS传递消息中获益,或者您可以在将来对服务方法进行一些安全保护。因此,分离关注点是一种很好的做法

  • 很容易对服务进行模拟和测试(甚至可以对DAO进行测试),但通过使用服务层接口分离业务逻辑是一种很好的方法


  • 但是,如果您在服务层中没有任何业务逻辑,您可以通过简单地使用DAO来避免冗余代码(但对于未来,如果您考虑到服务层业务,您将有重构的代码债务)

    是的,我首先也是这么想的。但服务调用的是DAO,我认为只从服务层调用DAO可能是个好主意(可能有一些原因),因为服务层用于调用DAO