Object-Oriented DynamoDB API

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Я являюсь большим поклонником облачных вычислений в целом и Amazon Web Services в частности. Я искренне верю, что через несколько лет крупные провайдеры будут хостить все или почти все вычислительные и хранилищеские ресурсы. Когда так будет, нам уже не придется слишком беспокоиться о перерывах в работе, резервных копиях и системных администраторах. DynamoDB является одним из шагов на пути к этому будущему.

DynamoDB - это база данных NoSQL, доступная через RESTful JSON API. Ее дизайн относительно прост. Есть таблицы, которые в основном представляют собой наборы структур данных или, в терминологии AWS, “элементы”.

У каждого элемента есть обязательный “хеш”, необязательный “диапазон” и несколько других необязательных атрибутов. Например, возьмем таблицу с примером depts:

Для Java Amazon предоставляет SDK, который отображает все RESTful вызовы на методы Java. SDK работает отлично, но разработан в чистом процедурном стиле.

Допустим, мы хотим добавить новый элемент в указанную таблицу. RESTful вызов putItem выглядит примерно так:

Это то, что сервер Amazon должен знать, чтобы создать новый элемент в таблице. Вот как вы должны сделать этот вызов через AWS Java SDK:

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

Чтобы вы могли сравнить, позвольте мне показать, что я сделал с jcabi-dynamo. Вот мой код, который делает точно то же самое, но в объектно-ориентированном стиле:

Мой код не только короче, но он также использует инкапсуляцию и разделяет ответственность классов. Класс Table (фактически это интерфейс, реализованный внутри класса) инкапсулирует информацию о таблице, в то время как класс Item инкапсулирует детали элемента.

Мы можем передать item в качестве аргумента в другой метод, и все реализационные детали, связанные с DynamoDB, будут скрыты от него. Например, где-то позже в коде:

В этом скрипте мы ничего не знаем о DynamoDB или о том, как работать с его RESTful API. Мы взаимодействуем только с экземпляром класса Item.

Кстати, все публичные сущности в jcabi-dynamo являются интерфейсами Java. Благодаря этому вы можете полностью тестировать и мокировать библиотеку (но я бы рекомендовал использовать DynamoDB Local и создавать интеграционные тесты).

Рассмотрим более сложный пример, который займет целую страницу кода, если бы мы использовали голый AWS SDK. Допустим, мы хотим удалить всех работников из нашей таблицы, которые работают в качестве архитекторов:

jcabi-dynamo сэкономил много строк кода в нескольких моих проектах. Вы можете увидеть его в действии в rultor-users.

Библиотека поставляется в виде зависимости JAR в Maven Central (получите последние версии из Maven Central).

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 21:46

sixnines availability badge   GitHub stars