Meeting
に0以上の数字を持つシステムを構築しています。Attachment
です。 Meeting
をロードするたびに添付ファイルバイナリ全体を読み込まないようにするには、AttachmentRef(size, mimetype, reference, name, hash)
があります。 AttachmentsFactory.create(name, byte[]):AttachmentRef
:このリファレンスはmimetype
を推測する工場を経て作成されアタッチメント管理
、hash
とsize
とすべてはさておき、バイナリコンテンツの保存されていることesnureを計算します。
次に、ユーザーが添付ファイルを取得する場合、参照を逆参照する必要があります。 Attachment
は、バイナリの内容がAttachment(size, mimetype, name, content)
(参照とバイト[]のコンポジションで実装されています)という点を除けば、リファレンスとほぼ同じです。
私の質問は、この添付ファイルの検索についてですが、私は2つの主要な可能性を持っており、「DDD」デザインで最もよく見えるものを知りたいと思いますか?
1 - ダム参照、スマートサービス
AttachementService {
dereference(ref):Attachment {
// Get the binary, recompute and verify the hash and return an Attachment
}
}
attachmentService.dereference(ref)
2 - スマート参照、ダムサービス
AttachmentService {
read(ref):byte[] {
// Just return the content for the ref
}
}
AttachmentReference {
dereference(attachmentService) {
content = attachmentService.read(this)
// recompute and verify the hash
return new Attachment(this, content)
}
}
ref.dereference(attachmentService)
ありがとうございました。それは多かれ少なかれ私が思いついたことです。しかし、添付ファイルの内容を返すには、自分のハッシュが変更されていないことを確認する必要があります。それは 'AttachmentRef'かアプリケーション層の責任ですか?実際には、ハッシュを計算し、AttachmentRefを構築するのはAttachmentFactoryですが、理想的にはアルゴリズムは同じ(コード)でなければならないので、どこに置くべきですか? –
私はその処理をアプリケーション/統合レイヤーに配置します。最初に添付ファイルを保存するときは、ハッシュを計算する必要があり、添付ファイルに関連付けられています。添付ファイルにアルゴリズム名を追加することもできます(または、後でアルゴリズムを変更したい場合など)。そしてあなたがコンテンツを取得するとき、 'ContentService'はハッシングアルゴリズム(またはアルゴリズムコンテナ)を注入します。フェッチから結果を返すことができ、結果はハッシュが一致したかどうかを示すことができます。一致しない場合は例外をスローし、opsの問題になります。 –
ありがとうEben –