1

私は、CQRSパターンの独自の実装を使用して、古いプロジェクトをCQRSに移行しています。この移行を開始した主な理由は、n層アーキテクチャが引き起こした混乱を取り除くためでした。ただし、このプロジェクトは、他の多くのプロジェクトと同様に、リレーショナルデータストアを使用しています。

このプロセスの現在の状態は、変更を加えるコマンドとクエリを分離するクエリオブジェクトがあることです。つまり、クライアントからサーバーへの変更からのイベントを公開したり、非正規化された読み取りストアを使用したりすることはありませんが、データを変更およびクエリするCQRS風の方法があります。私の「ドメインモデル」として、かなり貧血のDTOもあります。すべての動作は、ハンドラー、マネージャー、およびそれらすべての恐ろしいレイヤーのものとともに、n層レイヤー全体に分散されていました。

次のステップに進む方法を知りたいです。私が今望んでいるのは、その動作を担当するドメインモデルの構築を開始することです。その理由は、信頼できる唯一の情報源としてイベントストアを使用し始めたいということです。

リレーションデータストアからイベントストアにデータを移行するにはどうすればよいですか?

移行する必要のある非常に重要なデータを含む、非常に正規化されたデータモデルがあります。データが死んでいるため、そのデータから意図をキャプチャすることは期待できないことは理解していますが、どうすればよいですか?大量の移行コマンドを作成する必要がありますか?これからあなたの経験を聞くのは素晴らしいことです。

4

3 に答える 3

6

私はこれを試す機会がありませんでしたが、私が試したかったことはいくつかの段階でうまくいくでしょう:

  1. まず、システムが必要とするすべてのイベントを計画します。
  2. 次に、イベントを表すために、ビューをリレーショナルデータベースに導入します。
  3. ビューから選択して正しいイベントオブジェクトを作成するカスタムユーティリティを作成します。
  4. カスタムユーティリティにイベントオブジェクトを正しい順序でイベントストアに書き込んでもらいます。
  5. 最後に、イベントストアから非正規化されたビューモデルを更新してください。

イベントがイベントストアに書き込まれる順序は少し注意が必要で、少し考える必要があると思います。しかし、これは移行プロセスであるため、ドメインの最終状態が正しい限り、それほど重要ではないと思います。リレーショナルテーブルにタイムスタンプがある場合、これが役立つ可能性があります。

リレーショナルデータは過去に発生したアクションのドメインを表すため、コマンドを作成するよりもイベントオブジェクトを作成する方が適切であると判断しました。

于 2011-06-29T12:47:28.530 に答える
3

Idは、提供されるソリューションとは異なる方法でこれにアプローチします。この移行は、2つの異なるプロジェクトで2回行いました。

コマンドに書き込みを実行させ、クエリに読み取りを実行させる最初のステップは、適切な最初のステップです。

次に行うことは、書き込みを行うのと同じコマンドからイベントを発生させることです。イベントの開催に慣れてください。

これは単に、コマンドハンドラーでイベントを作成し、それらをEventStoreにプッシュすることを意味します。

プロジェクトライフの早い段階でイベントのコミットを開始すると、アプリに多くの履歴があります。

ここで、コマンドハンドラーで正規化されたデータベースへの書き込みを続行します。

イベントを発生させるコマンドハンドラーがいくつかあると、次のステップは非常に簡単です。発生したイベントをリッスンし、コマンドハンドラーが実行したのとまったく同じ書き込み操作を実行するイベントハンドラー/非正規化機能を構築します。

これで、WRITEの責任を非正規化子に移動し、コマンドハンドラーから離れるだけです。

それは基本的に私がお勧めするプロセスです、私が言ったように、私はこれを2回行いました、そしてそれはうまくいきます。

データベース内の既存のデータをイベントに移行することは少し注意が必要です。そのデータを現在の状態と見なす必要があるため、(作成したユーティリティを使用して)ビルドおよびコミットできるすべてのことを実行できます。システム内のすべてのデータのイベントを作成します。

たとえば、既存のAccountsテーブルを移行するには、AccountCreatedEventを記述し、テーブル内の各アカウントのすべてのデータを使用してコミットします。

于 2013-10-03T10:36:03.423 に答える
0

最初のステップでは、ドメイン駆動設計の原則に従ってリッチドメインモデルを作成し、集約境界を描画します。そして、イベントソーシングへのさらなる移行は非常に簡単になります。このテーマに関するいくつかの投稿があります

于 2011-06-29T07:11:50.667 に答える