コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

コマンドクエリ責任分離

出典: フリー百科事典『ウィキペディア(Wikipedia)』

情報技術において、コマンドクエリ責任分離(コマンドクエリせきにんぶんり、英語: Command Query Responsibility Segregation, CQRS)とは、コマンドクエリ分離の背景にあるアイデアをサービスのレベルにまで拡張させたシステムアーキテクチャである[1][2]。 このようなシステムではコマンドを送信するインターフェースと、クエリを送信するインターフェースを分離する。CQSと同様に、クエリリクエストを処理する際はデータを取得するだけで、(ログ書き込みなどの例外を除き)システムの状態を変更することはない。一方、コマンドリクエストはシステムの状態を変更する。

多くのシステムでは、データモデルの分離まで進める。クエリを処理するために用いられるモデルは「読み取りモデル[3]」と呼ばれ、コマンドを処理するために用いられるモデルは「書き込みモデル[3]」「コマンド実行モデル[4]」と呼ばれる。

他のアーキテクチャパターンとの関連

[編集]

マーティン・ファウラーは以下のように述べている[5]

  • CRUDを経由してやり取りを行うような単一的な表現から離れることで、タスクベースなUIへと容易に移行できる。 
  • CQRSはイベントベースなプログラミングモデルによく適している。CQRSシステムがイベントコラボレーション(Event Collaboration)により連携する個別のサービスに分割されていることは一般的である。これらのサービスはイベント駆動アーキテクチャの利点を容易に活用できる。
  • 分割されたモデルを持つことはモデルの一貫性を保つことがいかに難しいかということについての問題を提起し、最終的に一貫性が保たれる可能性が高まる。
  • 多くの事業領域においては、データを更新する際に多くの必要な業務ロジックを経由する必要があるため、クエリ側のモデルを簡素化するために事前読み込み計算(Eager Read Derivation)を用いることが理に適っているかもしれない。
  • 書き込みモデルが全ての更新においてイベントを生成する場合、読み込みモデルをイベントポスター(Event Poster)として構造化して、これをメモリイメージ(Memory Images)とすることができ、データベースと多くのやり取りをすることを回避できる。
  • CQRSはドメイン駆動設計から恩恵を受けるような複雑な事業領域に適している。

関連項目

[編集]

参考文献

[編集]
  1. ^ Young. “CQRS Documents”. 2012年12月28日閲覧。
  2. ^ Fowler. “CQRS”. 2011年7月14日閲覧。
  3. ^ a b RobBagby. “CQRS パターン - Azure Architecture Center”. learn.microsoft.com. 2024年9月7日閲覧。
  4. ^ Vlad Khononov 著、増田亨・綿引琢磨 訳『ドメイン駆動設計をはじめよう』株式会社オライリー・ジャパン、2024年7月18日、xx, 44頁。 
  5. ^ bliki: CQRS”. martinfowler.com. 2024年9月7日閲覧。

外部リンク

[編集]