Зарезервирован ли DAO только для базовых операций CRUD, или он также может содержать некоторую сложную логику поиска?
Представьте себе два класса сущностей, Книгу и Автор, и отношения многих ко многим между ними. На этом этапе одного DAO может быть более чем достаточно, поскольку основные операции CRUD для обоих объектов одинаковы.
Однако, когда приложение становится более сложным, появляются новые требования, например:
1. найти первую книгу для данного автора
2. найти книги, которые автор написал в течение определенного периода времени
3. найти книги по определенной теме, которые написал данный автор
4. .... и т. Д.
Куда все это должно идти? Должен ли я создать отдельный класс DAO для каждого объекта и поместить их туда? Они вообще относятся к слою DAO?
У меня есть эта дилемма:
куда должны идти следующие методы:
findBooks (Автор, автор)
findBooks (издатель издатель)
оба в BookDAO, или один в AuthorDAO, другой PublisherDAO?
Или, может быть, мне следует подумать о совершенно новой абстракции, которая находится поверх DAO и оставляет их для базовых операций CRUD - например, SearchService, в котором перечислены все возможные поиски?