2012-01-23 7 views
0

コマンドクエリ分離では、すべてのメソッドがアクションを実行するコマンドか、または呼び出し元にデータを返すクエリであることをお勧めします。Stringクラスの `replace()`メソッドがCommand-Query Separationに違反していますか?

しかし、たとえばStringクラスのreplaceメソッドはどうでしょうか。

署名は次のとおりです。String replace(String str);

これはCQSに違反していますか?

違反していることを認めれば、コマンドであるreplace()が最新のStringを呼び出し側に通知できるように修正する方法はわかりません。実際、CQSによるコマンドは戻り値の型として空白を持っていなければなりません。

+1

質問がありますか、まさに観測していますか? http://stackoverflow.com/faq#dontask –

+2

を参照してください。JavaはリモートでCQSに従うと誰が言いますか?どちらの場合でも、 'replace'は呼び出されている文字列を変更しません。 –

答えて

8

私はそれが違反だとは思っていません。確かにそれは質問です。データについて質問します。元の文字列があれば何を得ますか?

明らかに副作用のコマンドではありません。文字列が不変であるため、それはできません。

私は、CQSの専門家に近づいて何であると主張するつもりはないが、それはString.replaceは、より多くの私にはコマンドよりもクエリのようにたくさんの音。

関連する問題