Quelles sont les meilleures pratiques pour l'utilisation des méthodes d'extension dans .Net?

Translate

J'ai vu ceux-ci être utilisés dans tous les sens et j'ai été accusé de les avoir mal utilisés (même si dans ce cas, je les utilisais de cette façon pour démontrer unpoint).

Alors, quelles sont selon vous les meilleures pratiques pour utiliser les méthodes de vulgarisation?

Les équipes de développement doivent-elles créer une bibliothèque de méthodes d'extension et les déployer dans divers projets?

Devrait-il y avoir une collection de méthodes d'extension courantes sous la forme d'un projet open source?

Mise à jour: ont décidé de créer une bibliothèque de méthodes d'extension à l'échelle de l'organisation

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

La prochaine version des Framework Design Guidelines, 2e édition contiendra des conseils pour la mise en œuvre des méthodes d'extension, mais en général:

Vous ne devez définir des méthodes d'extension que «là où elles ont un sens sémantique» et fournissent des fonctionnalités d'assistance pertinentes pour chaque implémentation.

Vous devez également éviter d'étendre System.Object car tous les langages .NET ne pourront pas appeler la méthode d'extension en tant qu'extension. (VB.NET par exemple aurait besoin de l'appeler comme une méthode statique régulière sur la classe d'extension statique.)

Ne définissez pas une méthode d'extension dans le même espace de noms que le type étendu, sauf si vous étendez une interface.

Ne définissez pas une méthode d'extension avec la même signature qu'une méthode "réelle" car elle ne sera jamais appelée.

La source
Translate

vous voudrez peut-être jeter un oeil àhttp://www.codeplex.com/nxlethttp://www.codeplex.com/umbrellaqui sont tous deux des bibliothèques de méthodes d'extension. Personnellement, je n'ai pas regardé le code source, mais je suis sûr que les gars là-bas seraient en mesure de vous donner de bons conseils.

La source
Translate

J'ai inclus mes méthodes d'extension dans mes bibliothèques Core dans la classe Utils parce que les personnes qui travaillent avec mon framework trouveront probablement les méthodes utiles, mais pour un déploiement de masse où le développeur final peut avoir le choix entre des bibliothèques de méthodes d'extension, Je conseillerais de mettre toutes vos extensions dans leur propre espace de noms, même leur propre fichier de projet, afin que les gens puissent choisir d'ajouter une référence ou une instruction using ou simplement si nécessaire, comme ceci:

Core.Extensions.Base64Encode(str);

Ma classe Utils est mon meilleur ami dans le monde entier, c'était avant l'arrivée des méthodes de vulgarisation et elles n'ont fait que renforcer notre relation. La règle la plus importante que je respecterais est de donner aux gens le choix du cadre d'extension qu'ils utilisent lorsque cela est possible.

La source
Translate

Le langage Objective-C a des «Catégories» depuis le début des années 1990; ce sont essentiellement la même chose que les méthodes d'extension .NET. Lorsque vous recherchez les meilleures pratiques, vous voudrez peut-être voir quelles règles empiriques les développeurs d'Objective-C (Cocoa et NeXT) ont élaborées autour d'elles.

Brent Simmons(l'auteur du lecteur RSS NetNewsWire pour Mac OS X et iPhone) vient de publier aujourd'hui à propos de sonnouvelles règles de style pour l'utilisation des catégorieset il y a eu un peu dediscussion dans la communauté Cocoaautour de ce poste.

La source
Translate

Je pense que cela dépend de l'objectif des méthodes d'extension.

  • Les méthodes d'extension liées aux besoins métier spécifiques d'un projet (qu'elles soient connectées à des types de données de base ou à des objets personnalisés) ne doivent pas être incluses dans une bibliothèque qui serait distribuée sur plusieurs projets.
  • Les méthodes d'extension qui concernent les types de données de base (int, chaîne, etc.) ou les génériques qui ont une application plus large peuvent être regroupées et distribuées dans les projets.

Veillez à ne pas inclure globalement des méthodes d'extension qui ont peu d'application, car elles ne font qu'obstruer l'intellisense et peuvent conduire à la confusion et / ou à une mauvaise utilisation.

La source
Translate

Quand j'ai découvert les extensions pour la première fois, je les ai vraiment abusées et abusées.

Pour la plupart, j'ai commencé à éviter d'utiliser des méthodes d'extension pour un certain nombre de raisons.

Certaines des raisons pour lesquelles j'ai arrêté de les utiliser sont indiquées dans le lien du blog de Scott ci-dessus, comme "Réfléchissez à deux fois avant d'étendre les types que vous ne possédez pas". Si vous n'avez aucun contrôle sur la source pour les types que vous étendez, vous pouvez rencontrer des problèmes / collisions à l'avenir si le type de source a des ajouts / modifications, comme le déplacement de votre projet vers une version plus récente .NET. Si la version la plus récente de .NET inclut une méthode sur le type du même nom que votre extension, quelqu'un va être écrasé.

La principale raison pour laquelle j'ai arrêté d'utiliser les méthodes d'extension est que vous ne pouvez pas dire rapidement à la lecture du code où se trouve la source de la méthode et qui la "possède".

Lorsque vous lisez simplement le code, vous ne pouvez pas dire si la méthode est une extension ou simplement une méthode API NET standard sur le type.

Le menu intellisense peut devenir très rapidement très compliqué.

La source