私は流暢なインターフェイスを書いて、流行のインターフェース(私は彼とエリックエバンスがその言葉を作ったことには気づいていませんでした)に書いた古い作品のMartin Fowlerを見ました。この記事では、設定者は通常、構成または作業中のオブジェクトのインスタンスを返すと述べ、CQSに違反していると述べています。流暢なインターフェイスはコマンドクエリ分離原理に違反していますか?
中括弧の世界では一般的な慣例は、それが CommandQuerySeparationの原則に従っているので、私は好き 方法が無効であること修飾子、です。このコンベンションでは、流暢なインターフェイスの が途切れてしまいますので、この ケースのために規約を一時停止する予定です。だから、
私の流れるようなインターフェイスのようなものがない場合:
myObject
.useRepository("Stuff")
.withTransactionSupport()
.retries(3)
.logWarnings()
.logErrors();
をこれは本当にCQSの違反ですか?
UPDATEロギングの警告とエラーを個別の動作として表示するためにサンプルを作成しました。
「logWarningsAndErrors」は何かを返しますか?コマンド/クエリ分離の違反は、設定目的に役立つコマンドが関連のないデータを返した場合に発生します。もしそうでなければ、本当に流暢なインターフェースですか? –
@ M.Babcockが私のサンプルを更新しました。確かに、 'logWarningsAndErrors'は、追加の振る舞いを追加できるインターフェースを返します。 –