【问题标题】:Service Layer inject multiple DAO in practice服务层在实践中注入多个 DAO
【发布时间】:2011-08-23 00:50:27
【问题描述】:

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

在DAO层,有DAO Classes被称为: Dao1,Dao2,Dao3 ...

在服务层中,有一些服务类被称为: 服务 1、服务 2、服务 3 ...

Service1需要注入Dao1、Dao2、Dao3

Service2需要注入Dao2、Dao3、Dao4

Service3需要注入Dao3

...

创建用户示例:

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

看来我们需要做一些重复的工作。实践中有没有解决办法?一世 我正在使用 Spring 框架。使用 @Resource 注解将这些 Dao 注入到 Service Class 中。

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

谢谢

【问题讨论】:

  • 我不明白 DAO 和服务类之间是否有任何关系,DAO 是否针对不同的方面或什么。你能多解释一下这个结构的背景和目的吗?
  • @leet3lite 对不起我的解释。我添加了一些例子。希望它可以帮助。谢谢你的时间

标签: java spring architecture


【解决方案1】:

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

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

EJB 3+ 中的示例:

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

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

【讨论】:

  • +1。我还想补充一点,创建 DAOCollection 并使用服务扩展它意味着继承,而 IoC 完全是关于对象组合,所以这种想法有点违背目的。
猜你喜欢
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2013-05-16
  • 2011-04-19
  • 2013-05-27
  • 1970-01-01
相关资源
最近更新 更多