拡張メソッドの整理 [終了]
-
01-07-2019 - |
質問
拡張メソッドをどのように整理しますか?たとえば、オブジェクト クラスと文字列クラスの拡張機能がある場合、これらの拡張メソッドをクラス IE に分割したくなるでしょう。
public class ObjectExtensions
{
...
}
public class StringExtensions
{
...
}
これは複雑すぎますか、それとも意味がありますか?
解決
名前空間とクラス名の組み合わせを使用して拡張メソッドを編成しますが、質問で説明した方法と似ています。
通常、私のソリューションには、共有機能 (拡張メソッドなど) の大部分を提供するある種の「プライマリ アセンブリ」が含まれています。議論のために、このアセンブリを「フレームワーク」と呼びます。
Framework アセンブリ内で、拡張メソッドを持つものの名前空間を模倣しようとします。たとえば、System.Web.HttpApplication を拡張する場合は、「Framework.Web」名前空間を持つことになります。"System" 名前空間にある "String" や "Object" などのクラスは、そのアセンブリのルートの "Framework" 名前空間に変換されます。
最後に、質問で指定した行、つまり接尾辞として「Extensions」を付けた型名に沿って名前を付けます。これにより、次のようなクラス階層が生成されます。
- フレームワーク (名前空間)
- Framework.ObjectExtensions (クラス)
- Framework.StringExtensions (クラス)
- Framework.Web (名前空間)
- Framework.Web.HttpApplicationExtensions (クラス)
メンテナンスの観点から見ると、後で特定の型の拡張メソッドを見つけるのが非常に簡単になるという利点があります。
他のヒント
私が使用する拡張メソッドを整理するには 2 つの方法があります。
1) 拡張機能が私が取り組んでいるプロジェクトに固有のものである場合は、それを同じプロジェクト/アセンブリ内、ただし独自の名前空間内に保持します。
2) 拡張機能が他のプロジェクトでも使用できる種類のものである場合、または他のプロジェクトでも使用している場合は、それらを拡張機能用の共通アセンブリに分離します。
心に留めておくべき最も重要なことは、これらを使用する範囲はどのようなものかということです。これさえ覚えておけば、整理するのは難しくありません。