关于正确使用DAO(需要两个)

时间:2012-01-26 10:02:08

标签: java spring design-patterns architecture dao

可以说,当你达到将一个DAO注入另一个DAO时,你已经超越了DAO范围,并且达到了业务层问题吗?

注意:我没有考虑到特定问题,只是试图提取有关使用DAO的一般经验法则。

3 个答案:

答案 0 :(得分:3)

DAO和Business之间的划分是“武断的”。我们说当一个类用于“检索和存储来自存储库的数据”时,它是一个DAO。在另一个DAO中注入DAO这一事实并不妨碍它“从存储库中检索和存储数据”,所以对我来说,你的问题的答案是否定的。

没有地方说你不能将DAO注入另一个(即使通常不会这样做)。

答案 1 :(得分:1)

是。 DAO不应该相互依赖 业务/服务层的工作是协调不同的DAO。

但是,如果您描述您的具体情况,我们将能够提供更准确的答案。

修改
在阅读@ edutesoy的回答后,我看到了他的论点中的逻辑 所以我会通过说 - 这不是本身错误来改进我的答案,但它有点“臭”。

这是因为您的DAO层的正常结构 - 您通常为每种类型的实体(CustomerDAOOrdersDAO等)提供DAO。如果您的CustomerDAO正在使用您的PaymentsDAO,则有点像违反SRP:CustomerDAO是否也对付款相关的操作负责? 总而言之 - 在将其引入我的代码之前,我肯定需要一个很好的理由。

答案 2 :(得分:0)

愿你开始考虑DAO是什么。

如果您使用JPA,那么entiy管理器已经是通用DAO(由DAO Pattern提供)。大多数Java EE开发人员称之为DAO的不是DAO模式的DAO。这是某种重构:将与数据库相关的语句移出到外部类中(我认为这就是你所说的那种DAO)不要误解我的意思,我认为这很有用。

所以我对这个DAO的理解是一些重构的事情。重构的总体目标是使代码更易读,更易于维护。因此,如果你使用这个间接代码变得更好,那么继续,但你应该记录你的项目DAO-Pattern与其他Java EE开发人员使用的DAO模式略有不同。