【发布时间】:2012-01-25 10:09:52
【问题描述】:
DAO 是否仅保留用于基本的 CRUD 操作,或者它还可能包含一些复杂的搜索逻辑?
想象一下 Book 和 Author 这两个实体类以及它们之间的多对多关系。此时,单个 DAO 就足够了,因为两个实体的基本 CRUD 操作是相同的。
但是,随着应用变得越来越复杂,出现了新的要求,例如: 1. 找到给定作者的第一本书 2.查找作者在一段时间内写过的书 3. 查找给定作者写的关于特定主题的书籍 4. ....等
所有这些应该去哪里?我现在是否为每个实体创建一个单独的 DAO 类,并将它们放在那里?它们是否完全属于 DAO 层?
我有这个困境: 以下方法应该去哪里: findBooks(作者作者) findBooks(出版商出版商) 都在 BookDAO 中,还是在 AuthorDAO 中,另一个 PublisherDAO 中?
或者我应该考虑一个全新的抽象,它位于 DAO 之上并将它们留给基本的 CRUD 操作 - 例如 SearchService,它列出了所有可能的搜索?
【问题讨论】:
-
我通常将返回某个实体(或实体集合)的方法放在该实体的 dao 中。所以你给出的两个例子都会去 BookDAO IMO。否则如果你突然想创建
findBooks(Athor author, Publisher publisher)
标签: java design-patterns service dao