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是一种可通过RESTful JSON API访问的NoSQL数据库。它的设计相对简单。有表格,基本上是数据结构的集合,或者按照AWS的术语来说,是“项”。

每个项都有一个必填的“哈希”,一个可选的“范围”和一些其他可选属性。举个例子,以表格depts为例。

对于Java,亚马逊提供了一个SDK,它将所有的RESTful调用映射到Java方法。该SDK工作正常,但是它是以纯过程化风格设计的。

假设我们想要向上述表格中添加一个新项。RESTful调用putItem的本质上是这样的:

这是亚马逊服务器创建新项目所需了解的内容。这是你通过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:45

sixnines availability badge   GitHub stars