🎉 回答者が「いい質問」に選出しました 🎉

¥500

2023年11月30日

質問者さん

CQRS/ESを使うべきではないケースは、どのようなものがありますか?

2023年12月01日

かとじゅん

かとじゅんさん

CQRS/Event Sourcingを使用する理由は以下のようなものです。 - パフォーマンスの最適化:読み取りと書き込みの操作が異なるモデルやデータストアを使用できるため、それぞれを最適化することが可能です。例えば、書き込みモデルはトランザクション処理に特化し、読み取りモデルは高速なクエリ応答に特化できます。 - スケーラビリティの向上:読み取りと書き込みのコンポーネントを独立させることで、それぞれを別々にスケーリングすることができます。これにより、リソースをより効率的に利用し、システムの全体的な処理能力を向上させることができます。 - 複雑性の管理:CQRSは、ビジネスロジックをより単純で管理しやすい形に分離することにより、システムの複雑性を減らすのに役立ちます。 - セキュリティと安定性:書き込みと読み取りの処理を分離することで、セキュリティリスクを軽減し、システムの安定性を向上させることができます。 - 柔軟性と保守性:異なるモデルを使用することで、将来の変更や拡張が容易になり、システムの保守性が向上します。 というのが教科書的な説明ですが、考案者のGregさんは以下のように言っています。 > The application of Domain Driven Design is not possible in the above architecture though many who are “practicing” Domain Driven Design use this architecture. The reasoning for why it is impossible can easily be seen when one looks at how the Ubiquitous Language is represented by the object model. > ドメイン駆動設計を実践している多くの人は、先述のアーキテクチャを使用しますが、このアーキテクチャではドメイン駆動設計 のアプリケーションは不可能です。なぜ不可能なのかという推論は、ユビキタス言語がどのようにオブジェクトモデルを表現する のかを見れば、簡単に導くことができます。 先述のアーキテクチャとは非CQRSスタイルのことです。言い切ってますね。 これをもう少しかみ砕くと以下のようなことです。この資料の62ページから66ページまでをみてください。 https://speakerdeck.com/j5ik2o/ikanikai-fa-xiao-lu-topin-zhi-wogao-meruka-domeinqu-dong-she-ji-tozu-zhi-patannoshi-dian-karakao-eru?slide=62 ドメインモデルとリポジトリを使って複雑なクエリ要件を実装する際に、破綻が起きることが分かると思います。 逆にいえば、クエリ要件がそこまで複雑なものがない&非機能要件もそれほど高くないのであれば、CQRS/ESは不要かもしれません。

かとじゅんさんに 質問してみましょう!

かとじゅん

かとじゅん

DDD/Scala,Rust/A-CSM,CSPO,CSD/NLP Practitioner/お仕事のご相談は➡ https://t.co/e6L5mvqaIx / 質問は➡https://t.co/m3VwQnynVZ / Github sponsor ➡ https://t.co/JC9amBhwM9

Tips質問回答方針

Tips額に応じて優先して詳細に回答します。

Tips報酬金額を選択する

(Tips質問者は回答全文をメール受領できます)

¥0(無料質問)

かとじゅんさんが

回答したTips質問

¥500

03月09日

いうも有益な情報発信にとても感謝しております。僭越ながら質問させて頂きます。 EventSourcing+CQRSに興味がありつつ、クライアントが「コマンドを投げてからクエリとして結果取得できるまで」のタイムラグを許容できないケースが多いのではないかと考えております。 一般的には、あるリソースにPOSTして成功したら、次にGETした時にはその結果を取得できると期待されると思っています。 ES+CQRSでは、クエリモデルを作成するprojectionが非同期に動くため、コマンド成功直後はクエリモデルがまだ生成されていないと認識しています。 この時、クライアント側が認識を変えてコマンド直後にクエリできないかもしれない、という前提で実装することも考えられますが、Spring WebFlux を使うと解決できるものなのでしょうか? クライアントがクエリモデルのストリームを購読していれば、projectionの結果をリアクティブに受け取れると思いました。 ES+CQRSの場合に、WebFluxを採用することについてのお考えをお聞かせ頂ければ幸いです。 よろしくお願いします。

¥500

いいね!

2023年12月01日

CQRS/ESを使うべきではないケースは、どのようなものがありますか?

かとじゅんさんが

「いいね」した質問

¥500

いいね!

2023年12月01日

CQRS/ESを使うべきではないケースは、どのようなものがありますか?

いいね!

2023年11月26日

どんなに高カロリーなものを食べても健康状態の意味で、べき等だった時代に戻りたいです。

かとじゅんさんが

最近答えた質問

¥500

03月09日

いうも有益な情報発信にとても感謝しております。僭越ながら質問させて頂きます。 EventSourcing+CQRSに興味がありつつ、クライアントが「コマンドを投げてからクエリとして結果取得できるまで」のタイムラグを許容できないケースが多いのではないかと考えております。 一般的には、あるリソースにPOSTして成功したら、次にGETした時にはその結果を取得できると期待されると思っています。 ES+CQRSでは、クエリモデルを作成するprojectionが非同期に動くため、コマンド成功直後はクエリモデルがまだ生成されていないと認識しています。 この時、クライアント側が認識を変えてコマンド直後にクエリできないかもしれない、という前提で実装することも考えられますが、Spring WebFlux を使うと解決できるものなのでしょうか? クライアントがクエリモデルのストリームを購読していれば、projectionの結果をリアクティブに受け取れると思いました。 ES+CQRSの場合に、WebFluxを採用することについてのお考えをお聞かせ頂ければ幸いです。 よろしくお願いします。

02月16日

ソフトウェアアーキテクトとしてのご自身のゴールはありますか。

02月09日

CQRS(+ES)について質問です。 以下の前提とします。 --- Webブラウザ上で実行されるJavaScriptからサーバサイドにコマンドを発行します。 例えば、Xのプロフィールを更新するようなイメージです。 --- この場合、クライアント側のフローとしては、以下のように考えれば良いでしょうか? ①クエリにより、Xのプロフィールをバージョン付きで取得 ②プロフィールの変更内容とバージョンをコマンドとして発行 質問の趣旨としては、 「クライアントから、コマンド発行する際に利用するバージョンは、どのタイミングで取得するのが望ましいか」 というものになります。