Kawaii Lab

プログラミングとかサービス開発とか

CQRSとCQS

What is CQRS

Command Query Responsibility Segregation
和訳すると責務分離によるコマンドとクエリパターン になる

What is CQS

Command Query Separation
和訳すると分離によるコマンドとクエリパターンになる

What is コマンド and クエリ

  • コマンドとは実行により副作用(データへの変更)をもたらすもの a.k.a. 操作系
  • クエリとは実行により副作用をもたらさないもの a.k.a. 参照系

difference is CQRS and CQS

責務という概念を取り入れるかどうかの違いになると思う
具体的にいうと

  • CQSはメソッドレベルで参照系と操作系を切り分けること
  • CQRSドメインレベルで参照系と操作系を切り分けること

ここでのドメインとは複数の意味を指す言葉であるのだが、分かり易い例としてオニオンアーキテクチャにおけるドメインの単位毎に切り分けると考えた方がいいと思った。

what is advantage

スコープの厳密化

参照系と更新系を切り分けることによって、トランザクションを操作系だけにかけたりすることができる。

modelの管理

アプリケーションは廃棄容易性を高めなければ、非常に脆い存在になりかねない。
参照系と操作系のModelを分けることによって、参照系のViewをパッケージに切り分けることができるので管理がしやすくなる。

require Event Sourcing ?

これには賛否両論あると思うが、個人的には必要がないように思える。 処理の一連の流れもアプリケーションのドメインの一部だと思うので。 これはデータ操作のトリガー自体はDBの範囲内ではないという考えに基づいている。