Независимые от базы данных запросы до крайности в Java ... или вообще - PullRequest
0 голосов
/ 24 ноября 2010

Допустим, у меня есть приложение, которое в идеале должно быть в состоянии использовать реляционную базу данных, объектную базу данных, файлы XML или что-то еще для сохранения своих данных.В духе кодирования интерфейсов вместо реализаций у меня есть общий интерфейс DataStore, который определяет контракт для всех операций ввода-вывода, связанных с хранилищем данных.Этот интерфейс может быть реализован конкретными классами, такими как RDBMSDataStore, OODBMSDataStore, XMLFileDataStore и т. Д.

Это работает хорошо, пока я сохраняю содержимое интерфейса DataStore простым, то есть getThis(), getThose(), saveThat(), updateThis() и т. Д. Но как только мне требуются более сложные запросы, он выходит из строя.Класс XMLFileDataStore, очевидно, не понимает SQL, а класс RDBMSDataStore, очевидно, не понимает XPath / XQuery.И OODBMSDataStore понимает что-то совершенно иное в зависимости от используемой OODBMS.

Я мог бы принять язык запросов к объектно-независимому языку, написать все свои запросы на этом языке, а затем попросить конкретные классы перевести их на свой родной язык, ноэто огромная задача, если я хочу завершить ее.

Существуют ли стандарты или лучшие практики для решения подобных ситуаций в Java?К сожалению, кажется, что 99% мира интерпретирует «независимость от базы данных» как «независимость от реляционной базы данных» и полностью игнорирует объектные базы данных, базы данных XML, базы данных документов и т. Д.

1 Ответ

0 голосов
/ 24 ноября 2010

Из того, как я прочитал вопрос, это звучит очень похоже на семантику, которую Hibernate приносит в таблицу для Java. Он даже имеет режим для работы с XML в качестве хранилища содержимого (с использованием Dom4J). Hibernate API имеет ряд точек расширения, которые могут позволить добавить модель OODBMS. Даже если Hibernate окажется не лучшим решением для вас (с точки зрения реализации), я думаю, что он дает хороший пример типов шаблонов, которые можно использовать для решения предложенных вами проблем.

...