2017-09-21 9 views
0

私はイベントソーシングを使ってデータを保存するアプリケーションを開発中です。多くの理由から、永続化された読取りモデルは使用されないため、インメモリ読取りアプローチを実装する必要があります。Event sourcing:メモリ内読み込みモデル、読み込み中にイベントを適用するのは理にかなっていますか?

考え方は、集計の一部のデータは、現在の日付と過去の日付で読み取る必要があります。したがって、私が考えているアプローチは、集合体のすべてのイベントを処理し、指定された日付に状態を持つために集約してイベントをApplyすることです。

しかし、私は、コマンドがemittendであり、読み込みフェーズ中でないときにのみ使用されるべきであるという様々な記事を読んでいます。

読み取り段階でApplyメソッドを使用することは意味がありますか?あるいは、同じロジックを別の方法(ある種のプロセッサ)で複製する必要がありますか?

私が探しているのは、正しいアプローチが何であるべきかを理解し、ユーザーのイベントソーシングの仕方を理解することです。

+0

「さまざまな記事を読む」 - あなたはリンクを提供できますか? – VoiceOfUnreason

+0

@VoiceOfUnreason基本的に私が読んだ記事では、読み込みモデルを作成するためのさまざまなアプローチを提供しています。 – user449689

+0

したがって、基本的に集合体の状態を読み取る必要がありますか? –

答えて

1

イベントが発生したときにのみ呼び出すことができるとは限りません。 Applyメソッドの目的がにあり、イベントを集約にロードする場合は、集約を現在の状態に復元するときに呼び出されます。

ウィンドウ期間(開始日/終了日)に応じて集計を処理する必要があるようです。 は、興味のあるビットを表す読み込みモデルを作成し、時間依存データとして格納し、むしろというクエリをと照会する方が適切です。

処理が強すぎている場合は、その後も要求レポートや種類のビューが、時間に敏感な読み取りモデルによるものだろうまだ仕事とは、必要な出力を生成するコマンドを発行することもできます。完了すると、結果が閲覧の準備ができていることをユーザーに通知することができます。

@ Constantin Galbenuは次のように述べています。集約の内部状態を避ける必要があります。これは、ドメインモデルを照会しないでください。

+0

はい、これは最善の選択肢のようです。最後に、Applyメソッドはコマンドスタックの外側で決して呼び出されるべきではないため、イベントを適用するための検索結果を生成してユーザーに通知するコマンドを送信する必要があります。ありがとう – user449689

2

内部およびのプライベートの集約状態は、カプセル化を中断するので避けるべきです。また、Aggregateは、その不変量をチェックし、その状態を集計することが必要でないという追加の状態を維持するようにするために必要な状態を格納します。

結論として、書き込み側の読み取りは避けてください。

+0

あなたは正しいです、集約の内部および非公開の状態を避けるべきです。ありがとう – user449689

関連する問題