流暢なインターフェイスの基本的な機能の 1 つは、従来は として宣言されていたメソッドが、void
代わりに使用可能なもの、ほとんどの場合、それらが属するクラスのインスタンス (つまりthis
) を返すことです。StringBuilder はこの規則の例であり、それ自体は完全に流暢ではありませんが、チェーンされたメソッド呼び出しの利便性を提供します。
sb.Append("Foo")
.Append("Bar")
.AppendLine();
System.Web.Mvc.TagBuilder
ただし、この規則には従いません。メソッドはすべてvoid
です。
これを整理する手っ取り早い汚い方法は、プライベート TagBuilder( _instance
) をFluentTagBuilder
クラスにカプセル化し、同じメソッドをすべて実装して、作業をインスタンスに委譲し、this
代わりに返すことですvoid
。
これを達成するための、それほど迅速で汚い方法ではない最良の方法は何ですか? メソッドは戻り値の型によってのみ異なるため、継承は明らかに機能しません。私はそれをシンプルに保ち、可能であればモック/代用フレームワークを使用したくありません。共有できる知恵をありがとう!