服务层在实践中注入多个DAO

时间:2011-05-11 06:17:45

标签: java spring architecture

这是Dao层和服务层之间的设计问题:

在DAO层中,有一个名为的DAO类: Dao1,Dao2,Dao3 ......

在服务层中,有一些服务类叫做: Service1,Service2,Service3 ......

Service1需要注入Dao1,Dao2,Dao3

Service2需要注入Dao2,Dao3,Dao4

Service3需要注入Dao3

...

创建用户的示例:

UserService需要注入UserDao来创建用户,同时UserService需要注入LogDao 记录系统日志信息。

似乎我们需要做一些重复的工作。在实践中有任何解决方案吗?一世 我正在使用Spring框架。使用@Resource注释在服务类中注入这些Dao。

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

THX

1 个答案:

答案 0 :(得分:5)

您必须定义服务使用的DAO,因此您必须在某种程度上“重复”工作。

取决于您使用的框架(如果有),该声明不应过多开销(键入)。

EJB 3 +中的示例:

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

我会说你不应该创建一个共同的超类并在那里注入所有可能的DAO。这很可能会让人更难理解(为什么那些DAO在那里?,它们是否被使用?等)甚至可能存在性能问题,具体取决于使用的框架(您可以将每个DAO注入每个服务,从而创建一大堆未使用的DAO实例。)