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