java - 服务层在实践中注入(inject)多个DAO

标签 java spring architecture

这里有一个Dao层和Service层之间的设计问题:

在DAO层,有DAO Classes调用: 道 1、道 2、道 3 ...

在服务层,有服务类称为: 服务 1、服务 2、服务 3 ...

Service1需要注入(inject)Dao1、Dao2、Dao3

Service2需要注入(inject)Dao2、Dao3、Dao4

Service3需要注入(inject)Dao3

...

创建用户的例子:

UserService需要注入(inject)UserDao来创建用户,UserService也需要注入(inject)LogDao 记录系统日志信息。

看来我们需要做一些重复的工作。实践中有解决办法吗?我 我正在使用 Spring 框架。使用@Resource 注解将这些 Dao 注入(inject)到服务类中。

我的解决方案是: 将所有 Dao 类(Dao1、Dao2、Dao3 ...)注入(inject)到 DaoCollection 类中,然后是 service1、service2、service3...都扩展了 DaoCollection 类。这是好方法吗?

谢谢

最佳答案

无论如何,您都必须定义您的服务使用的 DAO,因此您必须在某种程度上进行“重复”工作。

根据您使用的框架(如果有的话),该声明不应有太多开销(输入)。

EJB 3+ 中的示例:

class Service1 {
  @EJB private DAO1 dao1;
  @EJB private DAO2 dao2;
  @EJB private DAO3 dao3;
  ...
}

我会说你不应该创建一个公共(public)父类(super class)并在那里注入(inject)所有可能的 DAO。这很可能会使它更难理解(为什么那些 DAO 在那里?它们被使用了吗?等等),甚至可能会出现性能问题,具体取决于所使用的框架(您可能将每个 DAO 注入(inject)到每个服务中,从而创建一大堆未使用的 DAO 实例)。

关于java - 服务层在实践中注入(inject)多个DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5960043/

相关文章:

java - Spring Boot 和安全 : How to extend response for 302 status code?

spring - GWT + Spring DATA、JPA 配置

java - spring mvc 与 jpa 中的 Multi-Tenancy 架构

python - 通知容器对象 : best practices

.net - 线程与线程池

java - 使用重载但方法不返回值。有任何想法吗?

java - RestFB仅返回当前用户墙条目

java - 如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单

java - Spring XD - 在运行时更改文件源目录

java - Selenium PhantomJS Java - 拒绝评估字符串,因为不允许使用 'unsafe-eval'