可以说,当你达到将一个DAO注入另一个DAO时,你已经超越了DAO范围,并且达到了业务层问题吗?
注意:我没有考虑到特定问题,只是试图提取有关使用DAO的一般经验法则。
答案 0 :(得分:3)
DAO和Business之间的划分是“武断的”。我们说当一个类用于“检索和存储来自存储库的数据”时,它是一个DAO。在另一个DAO中注入DAO这一事实并不妨碍它“从存储库中检索和存储数据”,所以对我来说,你的问题的答案是否定的。
没有地方说你不能将DAO注入另一个(即使通常不会这样做)。
答案 1 :(得分:1)
是。 DAO不应该相互依赖 业务/服务层的工作是协调不同的DAO。
但是,如果您描述您的具体情况,我们将能够提供更准确的答案。
修改强>
在阅读@ edutesoy的回答后,我看到了他的论点中的逻辑
所以我会通过说 - 这不是本身错误来改进我的答案,但它有点“臭”。
这是因为您的DAO层的正常结构 - 您通常为每种类型的实体(CustomerDAO
,OrdersDAO
等)提供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模式略有不同。