О правильном использовании DAO (возьмите два) - PullRequest
1 голос
/ 26 января 2012

Можно ли сказать, что когда вы достигли точки внедрения одного DAO в другой, вы уже перешли границы DAO и столкнулись с проблемой бизнес-уровня?

ПРИМЕЧАНИЕ: Я не имею в виду какую-то конкретную проблему, а просто пытаюсь извлечь общее практическое правило, касающееся использования DAO.

Ответы [ 3 ]

3 голосов
/ 26 января 2012

Разделение между DAO и Business является "произвольным". Мы говорим, что класс - это DAO, когда он используется для «извлечения и хранения данных из хранилищ». Тот факт, что вы внедряете DAO в другой DAO, не мешает ему «извлекать и хранить данные из хранилищ», поэтому для меня ответ на ваш вопрос - НЕТ.

Нигде не сказано, что нельзя вводить DAO в другой (хотя это обычно не делается).

1 голос
/ 26 января 2012

Да. DAO не должны зависеть друг от друга.
Задача бизнес / сервисного уровня - координировать различные DAO.

Однако, если бы вы описали свой конкретный сценарий, мы могли бы дать более точный ответ.

Edit:
Прочитав ответ @ edutesoy, я вижу логику в его аргументе.
Поэтому я уточню свой ответ, сказав - это не по своей сути неправильно делать это, но это немного «вонючий».

Это связано с нормальной структурой вашего уровня DAO - у вас обычно есть DAO для каждого типа объекта (CustomerDAO, OrdersDAO и т. Д.). Если ваш CustomerDAO использует ваш PaymentsDAO, он немного пахнет нарушением SRP: CustomerDAO отвечает также за операции, связанные с платежами?
Итак, в заключение, я бы определенно нуждался в очень веской причине для этого, прежде чем вводить его в свой код.

0 голосов
/ 26 января 2012

Можно начать с размышления о том, что такое DAO.

Если вы используете JPA, то менеджер entiy уже является общим DAO (по DAO Pattern). То, что большинство разработчиков Java EE называют DAO, не DAO by DAO Pattern. Это своего рода рефакторинг: перенести операторы, связанные с базой данных, во внешний класс (и я думаю, что это тот тип DAO, о котором вы говорите) Не поймите меня неправильно, я думаю, это полезно.

Так что мое понимание этого DAO - это некий рефакторинг. И главная цель рефакторинга - сделать код более читабельным, поддерживаемым. Поэтому, если ваш код улучшается с этим косвенным указанием, продолжайте, но вам следует документально подтвердить, что ваш проект DAO-Pattern немного отличается от шаблона DAO, используемого другими разработчиками Java EE.

...