Я колеблюсь между двумя проектами проекта базы данных с использованием Hibernate.
Дизайн # 1.
(1) Создайте общий интерфейс поставщика данных, включая набор интерфейсов DAO иобщие классы контейнера данных.Это скрывает нижнюю реализацию.Реализация поставщика данных может получить доступ к данным в базе данных, или к XML-файлу, или к сервису, или к чему-то еще.Пользователь поставщика данных не должен знать об этом.
(2) Создайте библиотеку базы данных с помощью Hibernate.Эта библиотека реализует интерфейс поставщика данных в (1).
Плохая вещь в Design # 1 состоит в том, что для того, чтобы скрыть детали реализации, мне нужно создать два набора классов контейнера данных.Один в общем интерфейсе провайдера данных - назовем их DPI-объектами, другой набор используется в библиотеке базы данных, исключительно для отображения сущностей / атрибутов в Hibernate - давайте назовем их H-объектами.В реализации DAO мне нужно прочитать данные из базы данных, чтобы создать H-объекты (через Hibernate), а затем преобразовать H-объекты в DPI-объекты.
Design # 2.
Несоздать общий интерфейс поставщика данных.Выставляйте H-объекты напрямую компонентам, которые используют базу данных lib.Поэтому пользователю библиотеки базы данных необходимо знать о Hibernate.
Мне больше нравится дизайн # 1, но я не хочу создавать два набора классов контейнера данных.Это правильный способ скрыть H-объекты и другие детали реализации Hibernate от пользователя, который использует поставщика данных на основе базы данных?
Есть ли какие-либо недостатки в Design # 2?Я не буду внедрять других поставщиков данных в будущем, поэтому я должен просто забыть об интерфейсе поставщиков данных и использовать Design # 2?
Что вы думаете об этом?Спасибо за ваше время!