19

拡張メソッドをどのように編成しますか? オブジェクト クラスと文字列クラスの拡張機能があるとしたら、これらの拡張メソッドをクラス IE に分離したくなります。

public class ObjectExtensions
{
    ...
}

public class StringExtensions
{
    ...
}

私はこれを複雑にしすぎていますか、それとも意味がありますか?

4

2 に答える 2

13

名前空間とクラス名の組み合わせを使用して拡張メソッドを編成します。これは、質問で説明する方法と似ています。

一般に、私のソリューションには、共有機能の大部分(拡張メソッドなど)を提供するある種の「プライマリアセンブリ」があります。説明のために、このアセンブリを「フレームワーク」と呼びます。

フレームワークアセンブリ内で、拡張メソッドを持つものの名前空間を模倣しようとします。たとえば、System.Web.HttpApplicationを拡張する場合、「Framework.Web」名前空間があります。「System」名前空間にある「String」や「Object」などのクラスは、そのアセンブリのルート「Framework」名前空間に変換されます。

最後に、名前付けは、質問で指定した行に沿って行われます。つまり、接尾辞として「Extensions」が付いたタイプ名です。これにより、次のようなクラス階層が生成されます。

  • フレームワーク(名前空間)
    • Framework.ObjectExtensions(クラス)
    • Framework.StringExtensions(クラス)
    • Framework.Web(名前空間)
      • Framework.Web.HttpApplicationExtensions(クラス)

利点は、メンテナンスの観点から、後で特定のタイプの拡張メソッドを見つけるのが非常に簡単になることです。

于 2008-09-18T20:48:31.470 に答える
3

私が使用する拡張メソッドを整理する方法は 2 つあります。

1) 拡張機能が私が取り組んでいるプロジェクトに固有のものである場合は、同じプロジェクト/アセンブリに保持しますが、独自の名前空間に保持します。

2)拡張機能が他のプロジェクトでも使用できる、または使用しているようなものである場合は、それらを拡張機能の共通アセンブリに分離します。

心に留めておくべき最も重要なことは、これらをどのような範囲で使用するかということです。これだけ覚えておけば、整理するのは難しくありません。

于 2008-09-18T20:46:52.830 に答える