.NETで拡張メソッドを使用するためのベストプラクティスは何ですか?

.net

私はこれらがどのように使われているかを見てきたし、間違った使い方をしていると非難されてきた。 -vbnet-and-c / [point])

それでは、拡張メソッドを採用するためのベストプラクティスは何だと思いますか?

開発チームは拡張メソッドのライブラリを作成し、それらをさまざまなプロジェクトに展開する必要がありますか?

オープンソースプロジェクトの形で一般的な拡張方法の集まりがあるべきですか?

更新:組織全体の拡張メソッドライブラリを作成することにしました

  40  6


ベストアンサー

Framework Design Guidelines、2nd Editionの次のリリースでは、拡張メソッドを実装するためのガイダンスがいくつかありますが、一般的には:

拡張メソッドは「意味的に意味のある場所」にのみ定義し、すべての実装に関連するヘルパー機能を提供するようにしてください。

また、すべての.NET言語が拡張機能を拡張機能として呼び出すことができるわけではないため、System.Objectを拡張しないでください。 (例えばVB.NETはそれを静的拡張クラスの通常の静的メソッドとして呼び出す必要があるでしょう。)

インターフェースを拡張しない限り、拡張型と同じ名前空間で拡張メソッドを定義しないでください。

呼び出されることは決してないので、「実際の」メソッドと同じシグネチャを持つ拡張メソッドを定義しないでください。

7


どちらも拡張メソッドライブラリであるhttp://www.codeplex.com/nxlとhttp://www.codeplex.com/umbrellaを見てみるとよいでしょう。 私は個人的にはソースコードを見ていませんでしたが、そこにいる人たちがあなたにいくつかの良い指針を与えることができると確信しています。

4


私のフレームワークを扱っている人はそのメソッドが便利だと思うので、私のコアライブラリと一緒に私の拡張メソッドをUtilsクラスに含めてきました。以下のように、参照やusingステートメントを追加するか、必要な場合は単に追加することを選択できるように、すべての拡張機能を独自の名前空間、さらには独自のプロジェクトファイルに配置することをお勧めします。

Core.Extensions.Base64Encode(str);

私のUtilsクラスは私の全世界での一番の友です、それは拡張メソッドが登場する前であり、それらは私たちの関係を強化するのを助けただけでした。 私が従う最大のルールは、可能な限り彼らがどの拡張フレームワークを使っているかについての選択を人々に与えることです。

3


Objective-C言語には、1990年代初頭から「カテゴリ」がありました。これらは基本的に.NET拡張メソッドと同じものです。 ベストプラクティスを探すときには、どんな経験則Objective-C(Cocoa)を見たいと思うかもしれません。

http://inessential.com/[Brent Simmons](Mac OS XおよびiPhone用のNetNewsWire RSSリーダーの作者)が、彼のhttp://inessential.com/?comments=1について本日投稿しました。

3


私はそれが拡張メソッドがどんな目的を果たすかにかかっていると思う。

  • プロジェクトの特定のビジネスニーズに関連する拡張メソッド(それらが基本データ型に関連付けられているかカスタムオブジェクトに関連付けられているかにかかわらず)は、複数のプロジェクトに分散されるライブラリに含めるべきではありません。

  • 基本データ型(int、文字列など)またはより広いアプリケーションを持つ総称に関連する拡張メソッドは、パッケージ化してプロジェクト間で分散させることができます。

アプリケーションがほとんどない拡張メソッドは、単に理解を妨げ、混乱や誤用を招く可能性があるため、グローバルに含めないように注意してください。

2


私が初めてエクステンションについて知ったとき、私は本当にそれらを使いすぎて悪用しました。

ほとんどの場合、私はいくつかの理由で拡張メソッドを使わないようにし始めました。

私がそれらを使わなくなった理由のいくつかは、上のScottのブログリンクに記載されています。 拡張している型のソースを制御できない場合、プロジェクトを新しい.NETバージョンに移行するなど、ソース型に追加/変更があると、将来問題や衝突が発生する可能性があります。 新しい.NETバージョンに、あなたの拡張と同じ名前のタイプのメソッドが含まれている場合、誰かが壊れてしまうでしょう。

私が拡張メソッドの使用をやめた主な理由は、あなたがすぐにそのメソッドのソースがどこにあるのか、そして誰がそれを「所有している」かをコードから読むことではわからないことです。

コードを読み通すだけでは、そのメソッドがエクステンションなのか、そのタイプの標準のNET APIメソッドなのかわかりません。

インテリセンスメニューは本当に速くめちゃくちゃになります。

1


タイトルとURLをコピーしました