Допустим, у меня есть приложение, которое в идеале должно быть в состоянии использовать реляционную базу данных, объектную базу данных, файлы XML или что-то еще для сохранения своих данных.В духе кодирования интерфейсов вместо реализаций у меня есть общий интерфейс DataStore, который определяет контракт для всех операций ввода-вывода, связанных с хранилищем данных.Этот интерфейс может быть реализован конкретными классами, такими как RDBMSDataStore, OODBMSDataStore, XMLFileDataStore и т. Д.
Это работает хорошо, пока я сохраняю содержимое интерфейса DataStore простым, то есть getThis()
, getThose()
, saveThat()
, updateThis()
и т. Д. Но как только мне требуются более сложные запросы, он выходит из строя.Класс XMLFileDataStore, очевидно, не понимает SQL, а класс RDBMSDataStore, очевидно, не понимает XPath / XQuery.И OODBMSDataStore понимает что-то совершенно иное в зависимости от используемой OODBMS.
Я мог бы принять язык запросов к объектно-независимому языку, написать все свои запросы на этом языке, а затем попросить конкретные классы перевести их на свой родной язык, ноэто огромная задача, если я хочу завершить ее.
Существуют ли стандарты или лучшие практики для решения подобных ситуаций в Java?К сожалению, кажется, что 99% мира интерпретирует «независимость от базы данных» как «независимость от реляционной базы данных» и полностью игнорирует объектные базы данных, базы данных XML, базы данных документов и т. Д.