Вопрос

Я работаю над проектом JBJF на SourceForge, и мы хотим улучшить доступ к базе данных для этого фреймворка.В настоящее время он полугибкий, но доступ осуществляется на уровне задачи.

Мы хотели бы настроить какой-нибудь простой интерфейс, который был бы универсальным по своей природе и мог бы предоставлять доступ к базе данных в / из JBJF.Таким образом, классам фреймворка все равно, какого типа база данных, они просто вызывают метод, подобный getConnection(), и возвращается объект java.sql.Connection.

Мне интересно, что было бы лучше, типичный уровень DAO с единым интерфейсом или структура типа плагина, где мы настраиваем службу базы данных в XML-файле, а Фреймворк загружает плагины при запуске.

тиа,

adym

Это было полезно?

Решение

Я начал думать, что Hibernate стал слишком большим и раздутым, но недавно я работал над проектом, используя последнюю версию 3.5 и используя JPA, и они определенно сократили его и сделали намного лучше, чем некоторые другие версии 3.x .Я бы порекомендовал JPA использовать Hibernate :-)

Одна из замечательных особенностей этого подхода заключается в том, насколько хорошо Hibernate справляется с несколькими различными диалектами базы данных.Наше приложение работает на MySQL, H2 и SQLServer без каких-либо изменений (и, вероятно, также будет работать на других основных базах данных).

Другие советы

как насчет того, чтобы абстрагироваться от всего этого и использовать JPA

Трудно сказать, не зная деталей, но в целом я бы не стал писать свой собственный фреймворк и вместо этого использовал Hibernate или аналогичный инструмент ORM.В нем уже определен XML для сопоставления объектов с таблицами и обратно, он может легко переключаться между различными реализациями базы данных и, как правило, является отличным инструментом для выполнения подобных задач.

Два перечисленных вами варианта не являются взаимоисключающими;у вас может быть уровень DAO / Repository, к которому вы получаете доступ через некоторый интерфейс / API, в то время как конкретные реализации вводятся во время выполнения, чтобы удовлетворить ваши зависимости.

Например, напишите WidgetRepository - хранилище виджетов интерфейс, который определяет виджетную часть вашего API доступа к данным.Затем вы можете предоставить Файловая система widgetrepository, Расположение HibernateWidgetRepository, XmlWidgetRepository - Репозиторий, JpaWidgetRepository - репозиторий, и т.д.который реализует ваш интерфейс.

Общим правилом было бы использовать как можно более высокий уровень абстракции, сохраняя при этом выполнение ваших требований.В приведенном мною списке примеров репозиторий на основе JPA был бы самого высокого уровня, поскольку он абстрагирует даже фреймворк ORM.

Затем вы можете сохранить WidgetRepository - хранилище виджетов ссылка в ваших объектах, которые его используют.Кодируйте только для этого интерфейса.Затем поставьте на место Внедрение зависимостей фреймворк , подобный Весна, который будет впрыскивать бетон WidgetRepository - хранилище виджетов реализация во время выполнения на основе некоторой XML-конфигурации или механизма автоматического подключения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top