1

假设我有一个插图实体,它是一个聚合根。该实体包含有关艺术品的一些数据,并保留在 SQL 数据库中,而艺术品本身则保留在 Amazon S3 上。此外,我想保存一些按比例缩小或缩略图版本的艺术品,因此我引入了一个与插图具有多对一关系的Blob实体,用于表示各种版本的艺术品的二进制数据。

现在我想知道我应该如何设计 Blob 的持久性。Amazon S3 是一种数据库(请不要在这里点燃什么是真正的数据库;)),与 SQL 不同,我认为它应该像这样抽象,这意味着通过Repository。所以我会有一个 BlobRepository 来存储艺术品数据。另一方面——在这个域中,Blob 绝对不是聚合根——它总是被用作插图聚合的一部分。所以它不应该有自己的存储库。

所以也许 Amazon S3 不应该被视为一种持久性技术,而应该被视为一种通用的外部服务,仅次于 EmailSender、CurrencyConverter 等?如果是这样,我应该在哪里注入此服务?进到插图实体方法、插图存储库、应用服务层?

4

1 回答 1

1

首先,在处理 DDD 时,没有多对一或任何 RDBMS 概念,因为在 DDD 中,数据库不存在,所有内容都被发送到存储库。如果您使用的是 ORM,请知道 ORM 实体不是域实体,它们是持久性对象。

话虽如此,我认为插图存储库应该抽象RDBMSS3。这些是持久性实现细节,repo 应该处理它们。基本上,repo 将收到插图 AR,它将部分保存在 RDBMS 中,部分保存为 S3 中的 blob。

所以Domain不知道也不应该知道Amazon S3,也许明天你会想要使用Azure Db,Domain为什么要关心它呢?处理它是存储库的责任。

于 2012-07-03T18:23:35.050 回答