メソッドチェーンは、別のメソッドに対して結果を呼び出すためにオブジェクト自体を返すオブジェクトメソッドの慣行です。このような:
participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save()
可読コード、または「滑らかなインターフェース」を生成するため、これは良い習慣と考えられています。ただし、私にとっては、オブジェクト指向自体が意味するオブジェクト呼び出し表記が壊れているように見えます。結果のコードは、前のメソッドの結果に対するアクションの実行を表していないため、通常、オブジェクト指向コードが機能すると予想されます。
participant.getSchedule('monday').saveTo('monnday.file')
この違いにより、「結果のオブジェクトを呼び出す」というドット表記の2つの異なる意味が作成されます。チェーンのコンテキストでは、上記の例は実際にはスケジュールを保存することを目的としていますが、参加者オブジェクトの保存として読み取られます。 getScheduleが受け取ったオブジェクト。
ここでの違いは、呼び出されたメソッドが何かを返すことを期待する必要があるかどうかです(この場合、呼び出されたオブジェクト自体がチェーンに返されます)。ただし、これらの2つのケースは、表記法自体と区別できません。呼び出されるメソッドのセマンティクスのみから区別できます。メソッドチェーンが使用されていない場合、メソッド呼び出しが前の呼び出しの結果に関連する何かに作用することを常に知ることができます-チェーンを使用すると、この仮定が破られ、実際のオブジェクトが何であるかを理解するためにチェーン全体を意味的に処理する必要があります本当に呼ばれています。例えば:
participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter'))
ここで、最後の2つのメソッド呼び出しはgetSocialStreamの結果を参照していますが、前のメソッド呼び出しは参加者を参照しています。コンテキストが変化するチェーンを実際に作成することは悪い習慣かもしれません(そうですか?) 。
私には、メソッドチェーンが表面的には読み取り可能なコードを生成する一方で、ドット表記の意味をオーバーロードすると、さらに混乱が生じるだけのようです。私はプログラミングの第一人者とは思わないので、私が犯したのは自分のせいだと思います。だから:私は何が欠けていますか?どういうわけか間違った方法チェーンを理解していますか?メソッドチェーンが特に優れているケースや、特に悪いケースはありますか?
補足:この質問は、質問として隠された意見の声明として読むことができることを理解しています。ただし、そうではありません-チェーンが優れたプラクティスと見なされている理由を理解したいのですが、それが本来のオブジェクト指向表記を壊すと考えるときにどこが間違っているのでしょうか。
.
メソッドの戻り値を無視し、常に同じオブジェクトを使用してチェーンされたメソッドを呼び出す組み込みの代替表記法がある場合は、実際には必要ありません。