1

集約ルートであるIllustrationエンティティがあるとします。そのエンティティにはアートワークに関するデータが含まれており、アートワーク自体がAmazon S3に永続化されている間、SQLデータベースに永続化されます。また、アートワークの縮小版またはサムネイル版を保存したいので、さまざまなバージョンのアートワークのバイナリデータを表すために、イラストレーションと多対1の関係にあるBlobエンティティを導入しました。

ここで、Blobの永続性をどのように設計すればよいのでしょうか。Amazon S3は一種のデータベースであり(ここで真のデータベースとは何かを炎上させないでください;))、SQLとはまったく異なり、そのように抽象化する必要があると思います。つまり、リポジトリです。したがって、アートワークデータを保存できるBlobRepositoryがあります。一方、このドメインでは、Blobは絶対に集約ルートではありません。常にIllustration集約の一部として使用されます。したがって、独自のリポジトリを持つべきではありません。

では、Amazon S3は永続化テクノロジーとしてではなく、EmailSender、CurrencyConverterなどの隣にある一般的な外部サービスとして扱う必要があるのではないでしょうか。もしそうなら、私はこのサービスをどこに注入すべきですか?Illustrationエンティティメソッド、IllustrationsRepository、アプリケーションサービスレイヤーに?

4

1 に答える 1

1

まず、DDDを扱う場合、多対1またはRDBMSの概念はありません。これは、DDDにはデータベースが存在しないため、すべてがリポジトリに送信されるためです。ORMを使用している場合は、ORMエンティティがドメインエンティティではなく、永続オブジェクトであることに注意してください。

そうは言っても、イラストレーションリポジトリはRDBMSとS3の両方を抽象化する必要があると思います。これらは永続性の実装の詳細であり、リポジトリはそれらを処理する必要があります。基本的に、リポジトリはイラストレーションARを受け取ります。これは、一部はRDBMSに保存され、一部はS3のblobとして保存されます。

したがって、ドメインはAmazon S3を知らないので、知らないはずです。明日はAzure Dbを使用したいと思うかもしれませんが、ドメインがそれを気にする必要があるのはなぜですか。それを処理するのはリポジトリの責任です。

于 2012-07-03T18:23:35.050 に答える