2008-08-06 20 views
36

私はこれがどのような方法でも使用されているのを見て、それらを間違った方法で使用していると非難されています(その場合、私はpointを示すためにそれらを使用していました)。拡張メソッドを.Netで使用するためのベストプラクティスは何ですか?

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

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

オープンソースプロジェクトの形式で共通の拡張メソッドのコレクションがあるべきですか?

アップデート:私はそれが拡張メソッドを果たすどのような目的に依存していることを考える

答えて

2

組織広い拡張メソッドライブラリを作成することにしました。

  • プロジェクトの特定のビジネスニーズに関連する拡張メソッド(基本データ型またはカスタムオブジェクトに接続されているかどうかにかかわらず)は、複数のプロジェクトにまたがって配布されるライブラリには含めないでください。
  • 基本データ型(int、stringなど)に関連する拡張メソッドまたはより広いアプリケーションを持つジェネリックをパッケージ化して複数のプロジェクトに分散することができます。

インテリセンスを詰まらせ、混乱や誤用を招く可能性があるため、アプリケーションがほとんどない拡張メソッドをグローバルに含めないように注意してください。

+0

はい。そうです。 ただし、より具体的なガイドラインが必要です。 (たとえば、オブジェクトクラスを拡張する必要がありますか) サードパーティライブラリを拡張する必要がありますか? – Vaibhav

3

私は、私のフレームワークを使って作業している人が役に立つと思うので、私のコアライブラリに私のコアライブラリを含めてきましたが、エンドデベロッパーが拡張メソッドライブラリの人が参照またはusingステートメントを追加することを選択できるように、私は、自分の名前空間、でも自分のプロジェクトファイルに拡張機能のすべてを置く助言または単にそうのように、必要な場合:

Core.Extensions.Base64Encode(str); 

私のUtilsクラスは全世界で私の最高の友人です。拡張メソッドが登場する前であり、彼らは私たちの関係を強化するためにのみ役立っています。私が行っていく最大のルールは、可能な場合にどの拡張フレームワークを使用しているかを人々に選択させることです。

4

両方の拡張メソッドライブラリであるhttp://www.codeplex.com/nxlhttp://www.codeplex.com/umbrellaをご覧ください。私は個人的にソースコードを見ていないが、そこにいる人はあなたに良い指針を与えることができると確信している。

+0

2008年以来、参照されたプロジェクトのいずれも今後の開発活動を行っていないように見えることに留意してください。 – DavidRR

3

Objective-C言語には1990年代初頭から「カテゴリ」がありました。これらは基本的に.NET拡張メソッドと同じものです。ベストプラクティスを探しているときに、Objective-C(Cocoa & NeXT)の開発者がどのようなルールを持っているのかを知ることができます。

Brent Simmons(Mac OS XとiPhone用のNetNewsWire RSSリーダーの著者)は、今日彼のnew style rules for the use of categoriesについて投稿しました。その投稿の周りにはdiscussion in the Cocoa communityのビットがあります。

7

Frameworkの設計ガイドラインの今後のリリースで、第2版は、拡張メソッドを実装するためのいくつかのガイダンスを持っているが、一般的になります。

あなたが唯一の「彼らはセマンティック意味をなす」拡張メソッドを定義する必要がありますし、ヘルパー機能を提供していますすべての実装に関連しています。

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

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

「リアル」メソッドと同じシグネチャを持つ拡張メソッドは、決して呼び出されないため、定義しないでください。

1

私が拡張機能について最初に見つけたとき、私は実際にそれらを過度に濫用して虐待しました。

ほとんどの場合、いくつかの理由で拡張メソッドの使用をやめ始めました。

私がこれらの使用をやめた理由のいくつかは、「あなたが所有していないタイプを拡張する前に2回考えてください」などのScottのブログのリンクに記載されています。拡張しているタイプのソースを制御できない場合、ソースタイプにいくつかの追加/変更があると、プロジェクトを新しい.NETバージョンに移動するなどの問題や衝突が発生する可能性があります。新しい.NETバージョンに、拡張と同じ名前の型のメソッドが含まれている場合、誰かが騒ぎ立てることになります。

拡張メソッドの使用を中止した主な理由は、メソッドのソースがどこにあり、誰がそのコードを所有しているのかをすぐに知ることができないことです。

コードを読み取るだけでは、メソッドが拡張型か、その型の標準NET APIメソッドかどうかを判断できません。

インテリセンスメニューは本当に面倒なことがあります。

関連する問題