2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ZOZOAdvent Calendar 2021

Day 16

CQRS/ESのコマンドAPIレスポンスについて考える

Last updated at Posted at 2021-12-15

この記事は ZOZO #4 Advent Calendar 2021 16日目の記事になります。

今回のプロジェクトでCQRS/ESアーキテクチャの実装に挑戦しました。

qiita1.jpg

構成としては上記のような感じです。

今回は詳細なアーキテクチャ、実装の話はあえてしませんが、実装していて気になった点を1点だけ共有します。

いまさら言うまでもなく、コマンドで登録されたEventは非同期でクエリ側のDBに共有されます。
そこには時間差が生じますが、結果整合性はシンプルなアーキテクチャを実現するためのトレードオフとなります。

しかし、APIを使う側はそうもいかないこともあります。これまで慣れてきた強整合のアーキテクチャと比較した際の違和感もあるでしょうし、コマンドの結果変更されたステートの情報をすぐに使いたいというニーズもあるでしょう。

そんなとき、大事になってくるのはコマンドAPIのレスポンスです。
コマンドAPIのレスポンスを丁寧に返してあげることで、クライアント側の不満をかなり減らせると思います。

現在のステート全体を返すのか、変更されたものだけ返すのか、その仕様は状況によるかと思いますが、少なくとも、コマンドのAPIを叩いた直後にクエリ側を叩く必要がないように、またはAPIのレスポンスとクエリの組み合わせできちんと課題が解決するようにしてあげるのがよいでしょう。

と今回のCQRS/ES実装の反省点でした。

明日は @daikon510 さんの記事になります。自分もZOZO #3 Advent Calendar 2021の方に「モジュラーモノリスに対する考察」というタイトルで書きます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?