Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更好的方法是:允许服务访问多个DAO或仅访问其他服务_Java_Design Patterns_Jakarta Ee - Fatal编程技术网

Java 更好的方法是:允许服务访问多个DAO或仅访问其他服务

Java 更好的方法是:允许服务访问多个DAO或仅访问其他服务,java,design-patterns,jakarta-ee,Java,Design Patterns,Jakarta Ee,我没有发现任何关于这个具体问题的问题。 更好的方法是:允许服务(或facades)访问多个DAO(与数据库对话的类)或仅访问其他服务 换句话说,我应该在不同的服务类之间引入相互依赖,还是通过向每个服务类注入多个DAO(如果需要)使服务类彼此完全独立更好 我发现这两种策略都可以,但我希望保持一致,使应用程序尽可能模块化和可维护。我觉得允许或禁止一个服务调用另一个服务或多个DAO是主观的。 我试图避免不必要的代码或奇怪的耦合,只是为了讽刺关于层通信的一些规则,遵循简单、清晰对象的基本OO原则通常会导

我没有发现任何关于这个具体问题的问题。 更好的方法是:允许服务(或facades)访问多个DAO(与数据库对话的类)或仅访问其他服务

换句话说,我应该在不同的服务类之间引入相互依赖,还是通过向每个服务类注入多个DAO(如果需要)使服务类彼此完全独立更好


我发现这两种策略都可以,但我希望保持一致,使应用程序尽可能模块化和可维护。

我觉得允许或禁止一个服务调用另一个服务或多个DAO是主观的。 我试图避免不必要的代码或奇怪的耦合,只是为了讽刺关于层通信的一些规则,遵循简单、清晰对象的基本OO原则通常会导致妥协

  • 如果服务B需要服务a中已经包含的其他功能,那么它应该调用它。我试图减少服务之间的依赖性,通常最终定义一小部分可以从其他服务调用的“基本”服务

  • 在服务中创建一个方法只是为了包装对DAO的调用是毫无意义的(在我看来),因此我更喜欢让服务根据需要调用尽可能多的DAO。同样,具有多个DAO的服务或方法表示应该重构的内容或需要调整的数据模型


  • 当然,在这方面有一些观点,但真正的“服务”方法应该是一个原子工作单元。如果他们正在创建一个相互依赖的网络,相互之间来回或横向调用,那么显然这些调用并没有执行原子任务。我认为让“服务”使用它需要的任何DAO都没有错。创建一组“服务”-CRUD方法来抽象DAO,DAO已经是CRUD方法的集合,而CRUD方法本身可能正在抽象掉JPA的抽象,您可以看到这可能是多层次的非功能抽象

    这种方法有时确实会导致您构建多个服务共享的域而不是服务中的共享“业务bean”。这很好


    (你能告诉我,我个人认为JPA已经淘汰了DAO的整个概念,我们应该在服务中使用EntityManager吗?:)

    所以你建议创建一个特殊的“基本服务”类,这是“正常”服务可以使用的唯一服务?还允许在有意义的情况下在服务之间共享DAO(例如,避免包装DAO方法供其他服务使用)?对我来说是有道理的,但这是一种混合策略(通常,混合策略是最好的,即使它们使代码不那么一致)。如果您愿意,可以制作一个特殊的
    BasicService
    。从来没有这样做过,因为我通常以很少的人结束。因此,这是一种混合策略,倾向于独立服务。