2017-10-09 9 views
0

Meetingに0以上の数字を持つシステムを構築しています。Attachmentです。 Meetingをロードするたびに添付ファイルバイナリ全体を読み込まないようにするには、AttachmentRef(size, mimetype, reference, name, hash)があります。 AttachmentsFactory.create(name, byte[]):AttachmentRef:このリファレンスはmimetypeを推測する工場を経て作成されアタッチメント管理

hashsizeとすべてはさておき、バイナリコンテンツの保存されていること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) 

答えて

1

これは実際に有界コンテキストの間の相互作用のかなり良い例です。 。あなたが参照して行っているよう

あなたMeetingは1つのBCであり、あなたのコンテンツがContent BCであるならば、あなたは非常によく、物理的に接続コンテンツ(byte[])を持っている可能性は、あなたのMeeting値オブジェクトとして表現しました。

添付のコンテンツがあなたのContent BCで、それは集約ルートだろうという点でContentItemまたはいくつかのように表すことができます。

実際のコンテンツの取得は、通常、統合/アプリケーション層で行われます。 Meeting紀元前にそれほど多くないとは思いません。

+0

ありがとうございました。それは多かれ少なかれ私が思いついたことです。しかし、添付ファイルの内容を返すには、自分のハッシュが変更されていないことを確認する必要があります。それは 'AttachmentRef'かアプリケーション層の責任ですか?実際には、ハッシュを計算し、AttachmentRefを構築するのはAttachmentFactoryですが、理想的にはアルゴリズムは同じ(コード)でなければならないので、どこに置くべきですか? –

+1

私はその処理をアプリケーション/統合レイヤーに配置します。最初に添付ファイルを保存するときは、ハッシュを計算する必要があり、添付ファイルに関連付けられています。添付ファイルにアルゴリズム名を追加することもできます(または、後でアルゴリズムを変更したい場合など)。そしてあなたがコンテンツを取得するとき、 'ContentService'はハッシングアルゴリズム(またはアルゴリズムコンテナ)を注入します。フェッチから結果を返すことができ、結果はハッシュが一致したかどうかを示すことができます。一致しない場合は例外をスローし、opsの問題になります。 –

+0

ありがとうEben –

関連する問題