2011-05-11 58 views
1

这里注入多个DAO是DAO层和服务层之间的设计问题:服务层在实践中

在DAO层,有DAO类叫做: 具有Dao1,Dao2,Dao3 ...

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

服务1需要注入具有Dao1,Dao2,Dao3

客服2需要注入Dao2,Dao3,Dao4

服务3需要注入Dao3

...

实例创建用户:

UserService需要注入的UserDAO创建用户,也UserService需要注入LogDao 记录系统日志信息。

看来我们需要做一些重复的工作。实践中是否有解决方案?我在使用Spring框架时使用了 。使用@Resource注释在服务类中注入这些Dao。

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

THX

+1

我不明白DAO和服务类别是否有任何关系,如果DAO是针对不同的方面或内容。你能解释一下这个构造的背景和目的吗? – 2011-05-11 06:21:26

+0

@ leet3lite对不起,我的解释。我已经添加了一些例子。希望它可以帮助。感谢你的时间 – EeE 2011-05-11 06:36:22

回答

5

你必须确定你的服务反正使用DAO的,所以你必须要做到这一点“重复”工作在一定程度上。

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

例在EJB 3+:

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

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

+0

有道理!谢谢! – EeE 2011-05-11 06:48:04

+2

+1。我还想补充一点,创建一个DAOCollection并将其扩展为服务意味着继承,而IoC则是关于对象组合,所以这种想法有失于目的。 – Elad 2011-05-11 07:12:20

+0

使用无状态会话bean进行DAO不是个好主意 – MyTitle 2012-12-26 08:43:36