Creare una classe regolare o una classe Interna per un Parametro Oggetto?
-
22-08-2019 - |
Domanda
Invece di passare molti argomenti di un metodo, avevo incapsulamento in un argomento in oggetto.
nota:semplicata per la demo
Per un caso del genere, quale sarebbe preferibile?
• Creare una classe e nome come
InventorySaveArgs
?
-- o --
• Creare una classe nidificata e nome comeSaveArgs
?
E vuoi anche spiegare perché uno dovrebbe scegliere l'uno o l'altro?
[MODIFICA]:Che tipo di argomento sarà utilizzato in altro, degli assiemi.
lato domanda:Solo per curiosità, se c'è un modello di nome per l'incapsulamento di parametri multipli per un singolo oggetto a caso.
[AGGIORNAMENTO]: Trova Annidato Tipo Di Linee Guida Per L'Utilizzo su MSDN
InventorySaveArgs
dovrebbe essere disponibile da un altro assembly, quindi vado con una classe regolare.
Soluzione
IIRC .NET Linee guida per la Progettazione sono abbastanza chiare su questo punto non ci dovrebbero essere pubblici i tipi nidificati.
Altri suggerimenti
Vorrei il nome InventorySaveArgs
solo nel caso in cui si desidera rendere il tipo di disponibile per altri tipi di utilizzo.Se è il nome InventorySaveArgs
dall'inizio quindi si avrà un nome significativo, in tutti i contesti, se hai bisogno di effettuare il refactoring.
Io sceglierei il primo, creare una classe esterna e il nome InventorySaveArgs.Se la classe è utilizzato un metodo pubblico, l'unico argomento per cui al di fuori della classe è spazio dei nomi di inquinamento.
Avendo la classe interna è francamente fastidioso in C#, perché si deve sempre precedere il nome del tipo con il nome della classe.Come detto, una volta che si pubblica l'unica motivazione per donig questo è la riduzione dello spazio dei nomi di inquinamento.Ma se il vostro spazio è così grande che il InventorySaveArgs classe sta facendo troppo grande probabilmente avete bisogno di rompere il vostro spazio dei nomi comunque.
L'unico motivo per incapsulare i parametri multipli per un singolo oggetto ho mai sentito parlare di un refactoring modello dettagliato di Martin Fowler