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