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