Некоторые дополнительные мысли по теме...
Одно из многих преимуществ использования шаблонов Spring для доступа к конкретному хранилищу данных (например, GemfireTemplate) заключается в том, что они защищают разработчиков от основных изменений API хранилища данных, вокруг которых обычно оборачивают шаблоны. Если поставщик хранилища данных вносит критические изменения в интерфейс API (как это было в случае с GemFire), тогда шаблон может обеспечить уровень абстракции/адаптации к базовому API без изменений в пользовательском приложении.
Кроме того, шаблон может использовать другие средства управления инфраструктурой Spring, такие как транзакции, которые обычно не встроены в базовые API-интерфейсы хранилища данных. Шаблоны также могут обеспечивать внешний вид и уровень удобства для нескольких различных API-интерфейсов в базовом продукте хранилища данных.
Например, GemfireTemplate инкапсулирует операции «получения» и «помещения» данных вместе с «запросом» интересующих данных.
Чтобы сделать первое в GemFire, вам нужно будет сделать следующее...
Region<String, SomeValue> example = gemfireCache.getRegion("/Example");
example.put("someKey", new SomeValue(..));
...
SomeValue someValue = example.get("someKey");
В то время как для запроса данных в «/Example» вы бы...
Region<String, SomeValue> example = gemfireCache.getRegion("/Example");
QueryService queryService = example.getQueryService();
Query query = queryService.newQuery("SELECT * FROM /Example WHERE ...");
Object result = query.execute(<any args for query parameters>);
if (result instanceof SelectResults) {
SelectResults<SomeValue> someValues = (SelectResults) result;
// process the query results
}
else {
// figure out what happened
}
Теперь сравните это с шаблоном Spring для получения/ввода данных.
gemfireTemplate.put("someKey", new SomeValue(..));
...
SomeValue someValule = gemfireTemplate.get("someKey");
И запрос...
SelectResults<SomeValue> results = gemfireTemplate.find("SELECT * FROM /Example WHERE ...", args);
// process the query results
Если возникает Исключение или результаты не могут быть собраны, то Исключения/Ошибки GemFires единообразно сопоставляются с основная иерархия исключений DAO Spring Framework, еще одно преимущество, которое упрощает переключение базовых хранилищ данных, а также обеспечивает согласованную обработку транзакций.
Наконец, в то время как Томас Даримонт и Master Slave прекрасно резюмировали преимущества использования абстракция Spring Data Repository, это не новая концепция.
До появления выразительной мощности и удобства абстракции репозитория Spring Data разработчики приложений использовали шаблон DAO для абстрагирования CRUD и других операций доступа к данным (например, запросов) из своего уровня служб приложений.
Однако Spring Data дает вам возможность сделать это, просто объявив контракт (интерфейс Java) для разрешенных операций доступа к данным, а Spring Data (включая реализации для конкретного поставщика, такие как Spring Data GemFire) позаботится обо всем остальном. подключение конкретной реализации хранилища данных "по умолчанию", которая очень настраиваемые.
Очевидно, я предвзят, но выражать запрос, используя имя метода интерфейса, используя параметры метода в качестве аргументов запроса SQL/OQL/и т. д., это просто чертовски круто и мощно.
Если запросы не слишком сложные или специфичные, их можно легко перенести из одного хранилища данных в другое, даже между отношением и хранилищем ключей/значений (например, GemFire, учитывая сходство между SQL и OQL).
Надеюсь это поможет. Ваше здоровье!
person
John Blum
schedule
10.03.2015