3

CQS の原則では、すべてのメソッドは、アクションを実行するコマンド、または呼び出し元にデータを返すクエリのいずれかである必要がありますが、両方であってはなりません。クエリが状態を変更することを期待しないため、クエリが他に何もしないことは理にかなっています。ただし、コマンドが追加の情報を返す場合は無害に見えます。戻り値を使用することも、無視することもできます。CQS の原則では、コマンドが値を返さないことを要求するのはなぜですか?

4

2 に答える 2

2

しかし、コマンドが追加の情報を返す場合、無害に見えますか?

よくあります。そうでない場合もあります。

人々は、コマンドのクエリを混乱させたり、その効果よりも返される情報のためにコマンドを呼び出したりし始める可能性があります (その効果が実際の効果になるのを防ぐ「巧妙な」方法もあり、脆弱な可能性があります)。

インターフェースにギャップが生じる可能性があります。人々が特定のクエリに対して想定できる唯一のユースケースが特定のコマンドと密接に関連している場合、クエリの純粋な形式を追加することは無意味に思えるかもしれません (たとえば、 a を使用してPop()noを使用してスタックを作成するPeek())。将来の変更に直面した場合のコンポーネントの柔軟性。

ある意味では、「無害に見える」というのはまさに、そのような構造を禁止する際に CQS が警告しているものです。

これは、特定のコマンドとクエリの組み合わせが価値があるほど有用ではないとまだ判断していない可能性があるということではありませんが、そのような決定の長所と短所を比較検討する際に、CQS は常に声で議論しています。それに対して。

于 2015-11-23T16:17:17.710 に答える