リクエスト/レスポンスはすべてCQSに違反しているようです。
ほとんどそうです。したがって、 Command-Query- Separationです。マーティン・ファウラーがうまく表現しているように:
基本的な考え方は、オブジェクトのメソッドを 2 つの明確に分離されたカテゴリに分割する必要があるということです。
クエリ: 結果を返し、システムの監視可能な状態を変更しません (副作用はありません)。
コマンド: システムの状態を変更しますが、値を返しません[強調]。
サーバーのオブジェクトを 1 つ増やすように要求するのはCommandであるため、値を返すべきではありません。その要求に対する応答を処理するということは、CQS の基本原則を破るコマンドとクエリ アクションを同時に実行していることを意味します。
したがって、サーバーの値を知りたい場合は、別のQueryを発行します。
リクエストとレスポンスのパターンが本当に必要な場合は、複雑なコールバック イベント プロセスのようなものが必要で、特定のリクエストのステータスのクエリを発行するか、システムのこの部分に純粋なCQS が適していないかのどちらかです。純粋な。
マルチスレッド化は CQS の主な欠点であり、実行が困難になる可能性があります。ウィキペディアには、これに関する基本的な例と議論があり、同じ Martin Fowler の記事へのリンクもあります。彼は、自分を狂わせることなく何かを成し遂げるために、パターンを破っても問題ないと示唆しています。
[Bertrand] Meyer [CQS の発明者] はコマンドとクエリの分離を絶対的に好んで使用しますが、例外もあります。スタックのポップは、状態を変更するクエリの良い例です。Meyer は、この方法を避けることができると正しく言っていますが、これは便利なイディオムです。ですから、できる限りこの原則に従うことを好みますが、ポップを得るためにそれを破る準備ができています.
TL;DR - 正しい CQS でなくても、おそらく応答を返すことだけを検討します。