Avere molte dichiarazioni di utilizzo / importazione indica un cattivo odore di progettazione o di codice?


13

In genere, vedo alcune istruzioni usando nella parte superiore del file di classe. Esempio:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

Ma in un progetto a cui sto lavorando, in diverse occasioni vedo 20 o più utilizzi / importazioni in un file di classe. Questo cattivo design? Sembra che le classi progettate per fare una cosa dovrebbero fare affidamento solo su alcuni componenti.


1
Visual Studio ha un'opzione per rimuovere le usingistruzioni inutilizzate . Potresti voler vedere quanti di questi 20 sono attualmente in uso.
Dan Pichelman,

@ Dan - Sono tutti in uso poiché ho usato ReSharper per eliminare quelli inutilizzati.
Jon Raynor,

Hai provato con l'aggiunta di un IoC, la conversione in iniezione del costruttore e / o la conversione di alcuni punti di integrazione in lambda in linea per vedere se ridurrà il numero di usingistruzioni senza dover aumentare il numero di classi? Tieni presente che un numero crescente di classi o file sorgente aumenterà le spese generali di gestione del codice sorgente.
rwong

2
IoC nasconde il problema.
Telastyn,

1
Alcune di queste cose sono quasi solo parte del linguaggio e dello stile di programmazione che incoraggia, come Collections.Generic e LINQ, quindi non mi preoccuperei necessariamente di quelle. Probabilmente focalizzerei la mia attenzione sugli altri. La maggior parte delle classi probabilmente non dovrebbe aver bisogno di fare IO direttamente, quindi forse se si trova dappertutto c'è un po 'di confusione di responsabilità o scarsa stratificazione, ma dipende dall'applicazione.
Erik Eidt,

Risposte:


21

Può indicare un cattivo design, sì. È possibile che la classe che stai guardando stia facendo troppe cose, ma potrebbe anche significare che gli spazi dei nomi che stai importando sono davvero più accoppiati di quanto la separazione dello spazio dei nomi implichi. Ciò può essere dovuto a un ingegnere eccessivo o a un'astrazione eccessiva, ma potrebbe anche essere solo un design che non si allinea bene con l'uso.

Detto questo, è un odore - a volte ti porta a qualcosa di brutto, a volte è solo un falso allarme.


Penso che il vero "odore di codice" sarebbe se gli spazi dei nomi importati fossero tutti, o per lo più, molto diversi nello scopo. Ad essere onesti, raramente ho avuto più di 6-8 usingin un singolo file C #.
Greg Burghardt,

2
Vorrei darti un secondo +1 se potessi, solo per usare correttamente il termine "odore di codice"!
Jörg W Mittag,

! @Greg - Sono d'accordo, di solito gli "usi" sono correlati. Penso che in questo caso si tratti di astrazione perché circa 15-20 degli "usi" provengono da spazi dei nomi delle applicazioni e il resto da .net framework.
Jon Raynor,

2

Una classe non dovrebbe essere più grande e non più piccola di quella necessaria per fornire una funzione prevista.

In un'applicazione, ho una classe di crittografia che ha un lavoro: crittografare i dati. Tra funzionalità di base, registrazione e gestione delle eccezioni, l'ambiente richiede 11 distinte importazioni di spazi dei nomi per eseguire questo lavoro.

È difficile per me dirmi "minimizza le importazioni". O per giudicare il successo della mia classe solo contando il numero di spazi dei nomi importati. Non posso legittimamente usare questo, isolatamente, come indicazione del successo di una classe. Per me, le "importazioni" sono il mezzo per raggiungere la fine della classe. Se il lavoro della classe è ben definito, tutto il resto all'interno del sistema di supporto, comprese le importazioni, si prenderà cura di se stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.