Quali sono le migliori pratiche per l'utilizzo dei metodi di estensione in .Net?

StackOverflow https://stackoverflow.com/questions/3147

  •  08-06-2019
  •  | 
  •  

Domanda

Li ho visti usati in ogni modo e sono stato accusato di usarli nel modo sbagliato (anche se in quel caso li stavo usando in quel modo per dimostrare un punto).

Quindi, quali pensi siano le migliori pratiche per utilizzare i metodi di estensione?

I team di sviluppo dovrebbero creare una libreria di metodi di estensione e distribuirli in vari progetti?

Dovrebbe esserci una raccolta di metodi di estensione comuni sotto forma di progetto open source?

Aggiornamento:hanno deciso di creare una libreria di metodi di estensione a livello di organizzazione

Nessuna soluzione corretta

Altri suggerimenti

La prossima versione delle Linee guida per la progettazione del framework, 2a edizione conterrà alcune indicazioni per l'implementazione dei metodi di estensione, ma in generale:

Dovresti definire solo metodi di estensione "dove hanno senso semantico" e fornire funzionalità di supporto rilevanti per ogni implementazione.

Dovresti anche evitare di estendere System.Object poiché non tutti i linguaggi .NET saranno in grado di chiamare il metodo di estensione come estensione.(VB.NET, ad esempio, dovrebbe chiamarlo come un normale metodo statico sulla classe di estensione statica.)

Non definire un metodo di estensione nello stesso spazio dei nomi del tipo esteso a meno che non si stia estendendo un'interfaccia.

Non definire un metodo di estensione con la stessa firma di un metodo "reale" poiché non verrà mai chiamato.

potresti voler dare un'occhiata http://www.codeplex.com/nxl E http://www.codeplex.com/umbrella che sono entrambe librerie di metodi di estensione.Personalmente non ho dato un'occhiata al codice sorgente ma sono sicuro che i ragazzi sarebbero in grado di darti qualche buon suggerimento.

Ho incluso i miei metodi di estensione con le mie librerie Core nella classe Utils perché è probabile che le persone che lavorano con il mio framework trovino utili i metodi, ma per la distribuzione di massa in cui lo sviluppatore finale potrebbe avere una scelta di librerie di metodi di estensione, Consiglierei di inserire tutte le tue estensioni nel proprio spazio dei nomi, anche nel proprio file di progetto, in modo che le persone possano scegliere di aggiungere un riferimento o un'istruzione using o semplicemente dove richiesto, in questo modo:

Core.Extensions.Base64Encode(str);

Il mio corso Utils è il mio migliore amico al mondo, da prima che arrivassero i metodi di estensione e hanno solo contribuito a rafforzare il nostro rapporto.La regola più importante che seguirei è quella di dare alle persone la possibilità di scegliere quale framework di estensione utilizzare, ove possibile.

Il linguaggio Objective-C ha "Categorie" dall'inizio degli anni '90;questi sono essenzialmente la stessa cosa dei metodi di estensione .NET.Quando cerchi le migliori pratiche potresti voler vedere quali regole pratiche gli sviluppatori Objective-C (Cocoa e NeXT) hanno escogitato attorno a loro.

Brent Simmons (l'autore del lettore RSS NetNewsWire per Mac OS X e iPhone) ha appena pubblicato un post oggi sul suo nuove regole di stile per l'utilizzo delle categorie e ce n'è stato un po' discussione nella comunità del cacao attorno a quel palo.

Penso che dipenda dallo scopo a cui servono i metodi di estensione.

  • I metodi di estensione relativi alle esigenze aziendali specifiche di un progetto (indipendentemente dal fatto che siano collegati a tipi di dati di base o oggetti personalizzati) non devono essere inclusi in una libreria che verrebbe distribuita su più progetti.
  • I metodi di estensione che si riferiscono ai tipi di dati di base (int, string, ecc.) o ai generici che hanno un'applicazione più ampia potrebbero essere pacchettizzati e distribuiti tra i progetti.

Fare attenzione a non includere globalmente metodi di estensione che hanno poca applicazione, poiché intasano semplicemente l'intellisense e possono portare a confusione e/o uso improprio.

Quando ho scoperto per la prima volta le estensioni, ne ho davvero abusato e abusato.

Per la maggior parte ho iniziato ad evitare di utilizzare qualsiasi metodo di estensione per una serie di motivi.

Alcuni dei motivi per cui ho smesso di usarli sono indicati nel collegamento al blog di Scott sopra, come "Pensaci due volte prima di estendere i tipi che non possiedi".Se non hai il controllo sull'origine per i tipi che stai estendendo, potresti riscontrare problemi/collisioni in futuro se il tipo di origine presenta alcune aggiunte/modifiche, ad esempio lo spostamento del progetto in una versione .NET più recente.Se la versione più recente di .NET include un metodo del tipo con lo stesso nome della tua estensione, qualcuno verrà bastonato.

Il motivo principale per cui ho smesso di utilizzare i metodi di estensione è che non è possibile capire rapidamente leggendo il codice dove si trova l'origine del metodo e chi lo "possiede".

Quando si legge semplicemente il codice non è possibile capire se il metodo è un'estensione o solo un metodo API NET standard sul tipo.

Il menu IntelliSense può diventare davvero disordinato molto velocemente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top