私は最近、拡張メソッドを使用して、自分が制御する (つまり、同じプログラム内にあり、変更できる) クラスにヘルパー ユーティリティを実装するというアイデアをいじっています。その背後にある理論的根拠は、多くの場合、これらのヘルパー ユーティリティは非常に特殊なシナリオで使用され、クラスの内部値へのアクセスを必要としないということです。
たとえば、StackExchange クラスがあるとします。PostQuestion
andSearch
とのようなメソッドがありAnswerQuestion
ます。
では、StackOverflow にだまされないように、レピュテーションを手動で計算したい場合はどうすればよいでしょうか。次の行に沿って何かを実装します。
int rep=0;
foreach(var post in StackExchangeInstance.MyPosts)
{
rep+=post.RepEarned;
}
StackExchange クラスにメソッドを追加することもできますが、内部処理は必要なく、プログラムの他の 1 つまたは 2 つの部分からのみ使用されます。
代わりに、これらの特定のヘルパー メソッドが 10 個または 20 個あると想像してください。確かに特定のシナリオでは便利ですが、一般的なケースでは間違いありません。私の考えは、次のようなものを変更しています
public static RepCalcHelpers
{
public static int CalcRep(StackExchange inst){ ... }
}
のようなものに
namespace Mynamespace.Extensions.RepCalculations
{
public static RepCalcExtensions
{
public static int CalcRep(this Stackexchange inst){...}
}
}
名前空間に注意してください。これを使用して、特定のシナリオ内で拡張メソッドをグループ化するのが理想的です。たとえば、「RepCalculations」、「Statistics」などです。
このタイプのパターンを聞いたことがあるかどうかを調べてみましたが、変更できないクラス以外に拡張メソッドが使用されているという証拠は見つかりませんでした。
この「パターン」にはどのような欠点がありますか? 代わりに、継承または構成、またはこれのための古き良き静的ヘルパークラスに固執する必要がありますか?