Was sind die Best Practices für die Verwendung von Erweiterungsmethoden in .Net?

Translate

Ich habe gesehen, wie diese auf jede Art und Weise verwendet wurden, und wurde beschuldigt, sie falsch verwendet zu haben (obwohl ich sie in diesem Fall auf diese Weise verwendet habe, um a zu demonstrierenPunkt).

Was sind Ihrer Meinung nach die besten Methoden für den Einsatz von Erweiterungsmethoden?

Sollten Entwicklungsteams eine Bibliothek mit Erweiterungsmethoden erstellen und diese für verschiedene Projekte bereitstellen?

Sollte es eine Sammlung gängiger Erweiterungsmethoden in Form eines Open Source-Projekts geben?

Update: haben beschlossen, eine organisationsweite Bibliothek mit Erweiterungsmethoden zu erstellen

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

Alle Antworten

Translate

Die bevorstehende Veröffentlichung der Framework Design Guidelines, 2. Ausgabe, enthält einige Anleitungen zur Implementierung von Erweiterungsmethoden, aber im Allgemeinen:

Sie sollten Erweiterungsmethoden nur definieren, "wo sie semantisch sinnvoll sind" und Hilfsfunktionen bereitstellen, die für jede Implementierung relevant sind.

Sie sollten auch vermeiden, System.Object zu erweitern, da nicht alle .NET-Sprachen die Erweiterungsmethode als Erweiterung aufrufen können. (VB.NET müsste es beispielsweise als reguläre statische Methode für die statische Erweiterungsklasse aufrufen.)

Definieren Sie keine Erweiterungsmethode im selben Namespace wie der erweiterte Typ, es sei denn, Sie erweitern eine Schnittstelle.

Definieren Sie keine Erweiterungsmethode mit derselben Signatur wie eine "echte" Methode, da sie niemals aufgerufen wird.

Quelle
Translate

Vielleicht möchten Sie einen Blick darauf werfenhttp://www.codeplex.com/nxlundhttp://www.codeplex.com/umbrellaDas sind beide Erweiterungsmethodenbibliotheken. Ich persönlich habe mir den Quellcode nicht angesehen, aber ich bin sicher, dass die Leute dort Ihnen einige gute Hinweise geben können.

Quelle
Translate

Ich habe meine Erweiterungsmethoden in meine Core-Bibliotheken in der Utils-Klasse aufgenommen, da Personen, die mit meinem Framework arbeiten, die Methoden wahrscheinlich nützlich finden, aber für die Massenbereitstellung, bei der der Endentwickler möglicherweise eine Auswahl an Erweiterungsmethodenbibliotheken hat. Ich würde empfehlen, alle Ihre Erweiterungen in ihren eigenen Namespace zu stellen, sogar in ihre eigene Projektdatei, damit die Benutzer wählen können, ob sie eine Referenz oder eine using-Anweisung hinzufügen möchten oder einfach, wo dies erforderlich ist:

Core.Extensions.Base64Encode(str);

Meine Utils-Klasse ist mein bester Freund auf der ganzen Welt. Es war, bevor Erweiterungsmethoden auf den Markt kamen, und sie haben nur dazu beigetragen, unsere Beziehung zu stärken. Die größte Regel, die ich befolgen würde, ist, den Leuten die Wahl zu geben, welches Erweiterungs-Framework sie verwenden, wo dies möglich ist.

Quelle
Translate

Die Objective-C-Sprache hat seit Anfang der neunziger Jahre "Kategorien"; Dies entspricht im Wesentlichen den .NET-Erweiterungsmethoden. Wenn Sie nach Best Practices suchen, möchten Sie vielleicht wissen, welche Faustregeln die Entwickler von Objective-C (Cocoa & NeXT) um sie herum entwickelt haben.

Brent Simmons(der Autor des NetNewsWire RSS-Readers für Mac OS X und iPhone) hat heute über seine Informationen gepostetneue Stilregeln für die Verwendung von Kategorienund es hat ein bisschen gegebenDiskussion in der Kakaogemeinschaftum diesen Beitrag.

Quelle
Translate

Ich denke, dass es davon abhängt, welchen Zweck die Erweiterungsmethoden erfüllen.

  • Erweiterungsmethoden, die sich auf bestimmte Geschäftsanforderungen eines Projekts beziehen (unabhängig davon, ob sie mit grundlegenden Datentypen oder benutzerdefinierten Objekten verbunden sind), sollten nicht in eine Bibliothek aufgenommen werden, die auf mehrere Projekte verteilt wäre.
  • Erweiterungsmethoden, die sich auf grundlegende Datentypen (int, string usw.) oder Generika mit einer breiteren Anwendung beziehen, können gepackt und auf Projekte verteilt werden.

Achten Sie darauf, Erweiterungsmethoden, die wenig Anwendung finden, nicht global einzuschließen, da sie nur Intellisense verstopfen und zu Verwirrung und / oder Missbrauch führen können.

Quelle
Translate

Als ich zum ersten Mal von Extensions erfuhr, habe ich sie wirklich überbeansprucht und missbraucht.

Zum größten Teil habe ich aus mehreren Gründen damit begonnen, keine Erweiterungsmethoden mehr zu verwenden.

Einige der Gründe, warum ich sie nicht mehr benutze, sind in Scotts Blog-Link oben aufgeführt, z. B. "Überlegen Sie zweimal, bevor Sie Typen erweitern, die Sie nicht besitzen". Wenn Sie keine Kontrolle über die Quelle für die Typen haben, die Sie erweitern, können in Zukunft Probleme / Kollisionen auftreten, wenn der Quelltyp einige Ergänzungen / Änderungen aufweist, z. B. das Verschieben Ihres Projekts auf eine neuere .NET-Version. Wenn die neuere .NET-Version eine Methode für den Typ mit demselben Namen wie Ihre Erweiterung enthält, wird jemand überfordert sein.

Der Hauptgrund, warum ich die Verwendung von Erweiterungsmethoden eingestellt habe, ist, dass Sie anhand des Codes nicht schnell erkennen können, wo sich die Quelle der Methode befindet und wem sie "gehört".

Wenn Sie nur den Code lesen, können Sie nicht feststellen, ob es sich bei der Methode um eine Erweiterung oder nur um eine Standard-NET-API-Methode für den Typ handelt.

Das Intellisense-Menü kann sehr schnell sehr chaotisch werden.

Quelle