Open2
CQRSとは何か?どう使うのか?
CQRS stands for Command Query Responsibility Segregation.
(DeepL) CQRSとは、Command Query Responsibility Segregationの略で、コマンド・クエリ責任分離のことです。
発端
- DDDであるエンティティを取得するのに、そのエンティティがもたないパラメータ由来の情報を使うケースがあった。
- 他のテーブルとの結合を複数回してから取得する処理になっている
- リポジトリに定義しようとすると、以下のような問題が発生
- そのリポジトリの担当範囲外のエンティティを取得する
- 対象エンティティが持たない値を引数にもつメソッドがリポジトリに実装される
-> DDDの思想的にいまいちな気がするがどうすればいい?
これを1つのUseCase(ApplicationService)で実装しようとすると、3つのRepositoryからそれぞれ値を取得し、戻り値のオブジェクトに詰め替えるような実装にせざるを得ません。
-> クエリサービスを使う
DDDも半人前だが、DDDの文脈で「クエリサービス」の意味がよくわかっていなかったので調べてみたらたどり着いた。
ようやく「クエリサービス」の意味が少しわかった。