BT

CQRSとイベントソーシングのデモアプリケーションを作る

| 作者: Jan Stenberg フォローする 34 人のフォロワー , 翻訳者 徳武 聡 フォローする 0 人のフォロワー 投稿日 2015年6月14日. 推定読書時間: 2 分 |

原文(投稿日:2015/06/08)へのリンク

Command Query Responsibility Segregation (CQRS)に関するアーキテクチャやパターンについて理解を深めるため、Sacha Barber氏はCQRSのデモアプリケーションを開発することに決めた。このアプリは、イベントソーシングも活用しており、記事で解説がされている。

Microsoft C# MVPであるBarber氏は、CQRSについて、副作用無しのクエリや読み取りアクセスの責務をコマンドの入力の処理の責務から分離する、ということだと考えている。氏の例では、書き込みと読み取りのモデルでそれぞれ、モデルとストレージを分離している。これは、Vladimir Khorikov氏が以前にCQRSの第3タイプとして定義したものだ。Barber氏はイベントソーシングについて、アプリケーションの状態の中の変更の保存を、現在状態だけではなく、イベントの連続として実現する。オブジェクトの現在の状態を取得するには、すべてのイベントは検索され、オブジェクトの連続として扱われる。これによって、イベントを再現することで、過去の状態を再現したり、遡及的な変更によって状態を調整できる。

イベントベースの書き込みモデルとふたつのモデルでの分離したストレージでは、読み取りモデルが書き込み側のイベントで更新される。これを非同期で実現するには、コマンドによる状態の変更は、続く読み取りには即時に反映されないかもしれない。Barber氏によれば、このデモアプリケーションは現在、結果整合性を保持している。氏によれば、この典型的なCQRSの実装はリクエスト/レスポンス型のオペレーションには向かない。つまり、ユーザが即時に正確なレスポンスを期待している場合には適さない。Barber氏によれば、ユーザの視点から見たコマンドがクエリから明確に分離されている場合が、CQRSに適したユースケースだ。

CQRSへの理解を深めるために、氏は.NETで完全なデモアプリを開発した。このアプリは、読み取りと書き込みの非同期アプローチを実現するために、RabbitMQを利用している。シンプルにするため、氏はインメモリのモデルを使っている、従って、イベントは実行期間中は永続化されない。氏のアプリケーションは、コマンドバス、ドメイン、イベントストア、イベントバス、NoSQLデータベース、イベントハンドラ、データレイヤでできている。

CQRSフレームワークは邪魔になるという意見は一般的だが、氏は経験不足を補うため、CQRSliteを使っている。CQRSliteはGreg Young氏が開発した古いフレームワークの拡張だ。

Barber氏のデモアプリケーションは、GitHubからダウンロードできる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT