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

EeE*_*EeE 1 java architecture spring

这是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类.这是好方法吗?

谢谢

Tho*_*mas 5

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

根据您使用的框架(如果有),该声明不应过多开销(键入).

EJB 3+中的示例:

class Service1 {
  @EJB private DAO1 dao1;
  @EJB private DAO2 dao2;
  @EJB private DAO3 dao3;
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • +1.我还想补充一点,创建一个DAOCollection并使用服务扩展它意味着继承,而IoC完全是关于对象组合,所以这种想法打败了目的. (2认同)