这是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
答案 0 :(得分:5)
您必须定义服务使用的DAO,因此您必须在某种程度上“重复”工作。
取决于您使用的框架(如果有),该声明不应过多开销(键入)。
EJB 3 +中的示例:
class Service1 {
@EJB private DAO1 dao1;
@EJB private DAO2 dao2;
@EJB private DAO3 dao3;
...
}
我会说你不应该创建一个共同的超类并在那里注入所有可能的DAO。这很可能会让人更难理解(为什么那些DAO在那里?,它们是否被使用?等)甚至可能存在性能问题,具体取决于使用的框架(您可以将每个DAO注入每个服务,从而创建一大堆未使用的DAO实例。)