1

アグリゲートが存在しない場合にEventStoreRepository.GetByIdに新しいストリームを作成させる理由を説明してください。この動作は、GetByIdに二重の責任を与えるように見えます。これは、私の場合、望ましくない結果をもたらす可能性があります。たとえば、私のアグリゲートは常にファクトリメソッドを実装して作成するため、最初のイベントでアグリゲートのIDが設定されます。アグリゲートが存在する前にコマンドが処理された場合、アグリゲートにIDが設定されていないか、他の状態が初期化されていなくても、コマンドが成功する可能性があります(null参照例外を伴うcrash-n-burnも同様に発生する可能性があります)。

時期尚早の作成とコマンド処理を防ぐために、集約が存在しない場合は、GetByIdに例外をスローさせたいと思います。

4

1 に答える 1

2

それは私の側のばかげた設計上の決定でした。私はこれを行ったり来たりしました。正直なところ、私はまだそれを行ったり来たりしています。

問題は、例外を実際に使用して、例外的または予期しないシナリオを示す必要があることです。問題は、ストリームが見つからないことは、一般的な操作であり、いくつかの点で予想される操作でさえある可能性があることです。例外をスローする、nullを返す、または空のストリームを返すというアイデアをいじくり回しました。

集計が空であるかどうかを判断する方法は、Revisionプロパティをチェックしてゼロかどうかを確認することです。

于 2011-09-19T11:38:02.330 に答える