私は流暢なインターフェースを書き始め、マーティン・ファウラーが流暢なインターフェースについて書いた古い作品を見てみました(彼とエリック・エバンスがこの用語を作り出したことに気づいていませんでした)。作品の中で、マーティンは、セッターは通常、構成または作業中のオブジェクトのインスタンスを返すと述べています。これは、CQSの違反であると彼は言います。
中括弧の世界での一般的な規則は、修飾子メソッドが無効であるということです。これは、CommandQuerySeparationの原則に従っているためです。この規則は流暢なインターフェースの邪魔になるので、この場合は規則を一時停止する傾向があります。
したがって、私の流暢なインターフェースが次のようなことをする場合:
myObject
.useRepository("Stuff")
.withTransactionSupport()
.retries(3)
.logWarnings()
.logErrors();
これは本当にCQSの違反ですか?
更新ログの警告とエラーを別々の動作として表示するために、サンプルを分割しました。