В настоящее время я работаю над проектом, к которому пришло это обсуждение, и я хотел спросить других, что они думают об этом.
Шаблон DAO (согласно википедии): «В компьютерном программном обеспечении объект доступа к данным (DAO) - это объект, который обеспечивает абстрактный интерфейс для некоторого типа базы данных или механизма персистентности, предоставляя некоторые конкретные операции без раскрытия деталей база данных. ".
Но, используя ORM, это явно работа ORM (например, Hibernate). Он точно предоставляет абстрактный интерфейс для некоторых (почти любых) типов баз данных.
Рассматривая несколько последних проектов, давайте посмотрим на слой DAO. Первым шагом всегда является общий hibernate dao с методами save (), findById (), findAll (). Это для меня просто проксирование методов спящего режима.
На шаг впереди я вижу такие интерфейсы, как предложенные здесь: Общий шаблон DAO в Hibernate , что полностью связывает DAO с гибернационным способом сохранения (слияние, запрос критериев). Этот DAO не может быть использован с другим механизмом сохранения, кроме Hibernate.
Итак, последний вопрос - это вопрос: для такого общего дизайна DAO, что нового приносит шаблон DAO? Если я хочу переключить ядро базы данных, я переключаю его на уровень гибернации. Итак, действительно ли это дает какие-либо преимущества от использования шаблонов DAO в приложениях ORM?
Давайте соберем немного опыта:
- Сколько раз вы видели иерархию классов DAO, тесно связанную с Hibernate (или другим ORM), и что вы думаете о преимуществах этого?
- Во скольких проектах вы изменили механизм персистентности таким образом, чтобы получать преимущества от уровня DAO (т. Е. Вам нужно было реализовать другой уровень DAO, поскольку ваша работа не может быть выполнена на уровне ORM путем переключения диалекта db)?
- Во скольких проектах вы только что разработали большую структуру DAO (интерфейс + класс для каждого объекта домена) и никогда не использовали ее по-настоящему (т.е. вы никогда не меняли реализацию базовой иерархии DAO)?
- Что вы думаете о приложениях без уровня DAO, просто использующих абстракцию, предоставляемую сеансами ORM?
Пожалуйста, поделитесь опытом.