Есть ли хороший общий шаблон для запросов к хранилищу данных, которые скрывают специфическую логику поставщика? - PullRequest
0 голосов
/ 07 января 2012

Я пытаюсь найти хороший способ реализовать универсальный API поиска в Java, который позволит моим пользователям выполнять поиск в бэкэнд-хранилище без необходимости знать, что это за бэкэнд-технология, и, таким образом, если в будущем мы поменяем поставщиков Я могу переопределить основную логику без необходимости перекодировать API. Хранилище внизу может быть реляционной базой данных или хранилищем документов, таким как SOLR, CouchDB, MongoDB и т. Д. Он должен поддерживать все типичные требования поиска, такие как подстановочные знаки, диапазоны, побитовые операторы и т. Д.

Существуют ли стандартные способы решения этой проблемы?

Будет ли JPA моей лучшей ставкой? Будет ли он делать все, что мне нужно, включая нереляционные базы данных?

Заранее спасибо!

Ответы [ 5 ]

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

JPA разработан только для РСУБД ... Использование его для других типов хранилищ данных не имеет большого смысла, поскольку всем нравится его синтаксис SQL утечки языка запросов. JDO разработан для агностичности хранилища данных и обеспечивает постоянство для многих хранилищ данных, используя его реализации, такие как DataNucleus, хотя и не все из тех, которые вы упомянули.

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

Зонтик проектов Spring Data предоставляет красивую абстракцию DAO с именем CrudRepository. Я полагаю, что большинство подпроектов ( JPA , MongoDB и т. Д.) Предоставляют некоторые реализации этого.

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

JPA будет одной из многих реализаций, которые вы использовали бы для сопоставления вашей реляционной базы данных с объектами.Это не защитит вас от изменений в базе данных.

Я думаю, вы ищете DAO Pattern .Я делаю следующее:

  1. Создайте интерфейс для каждого DAO
  2. Создайте реализацию DAO более высокого уровня, которая просто вызывает мою фактическую реализацию для конкретной базы данных
  3. Свяжите реализацию DAO более высокого уровня со специфичной для базы данных реализацией Spring.

Таким образом, ни один код нигде не затрагивает конкретную реализацию базы данных.Соединения формируются только в XML.

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

Вам нужна среда ORM, такая как Hibernate, если вы выбираете JPA, вам нужно заново изобрести множество колес.

Используя Hibernate, вы можете написать бизнес-логику для поиска в базе данных илихранилище без конкретной реализации поставщика, и если позже вам потребуется изменить бэкэнд, вы можете сделать это, не затрагивая существующую реализацию вашего бизнес-кода.

Я бы посоветовал вам проверить документацию гибернации длядальнейшая ссылка

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

JPA разработан на основе RDBMS, Hibernate также разработан для RDBMS. Существует несколько реализаций JPA, которые поддерживают no-sql. Подобные проекты построены вокруг Hibernate для поддержки баз данных без SQL. Однако сам API настроен для RDBMS.

Реализация шаблонов DAO потребует от вас написать собственный API-интерфейс запроса. Позже расширяйте реализацию, когда когда-либо изменится ваше хранилище данных.

JDO и DataNucleus спроектированы для разнородных хранилищ данных. Уже есть поддержка десятка магазинов плюс RDBMS. Прелесть в том, что API запросов остается постоянным во всех магазинах. JDO позволяет вам работать с моделью предметной области и оставлять детали хранения для реализаций, таких как DataNucleus.

Поэтому я предлагаю JDO api с датануклеусом. Приведенная ниже ссылка дает список хранилищ данных и функций, уже доступных в DataNucleus. http://www.datanucleus.org/products/accessplatform_3_0/datastore_features.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...