Includendo il nome del tipo in un nome di variabile

2

Abstract: è accettabile includere il nome del tipo nel nome della variabile?

Il mio scenario:

Sto lavorando con C # MVVM e ho un sacco di proprietà ICommand nel mio ViewModel, chiamato varie cose come GetSomething , DoSomething , WriteSomething , ecc. La "regola" per ordinare i membri in C # è in ordine alfabetico, quindi ho i miei comandi sparsi per tutto il file. Anche se li ordina manualmente, può essere difficile ricordare che GetSomething è un ICommand , specialmente quando ci sono due metodi per ogni comando (il void execute e il bool possono essere eseguiti) e un MenuItem al comando è associato a (il menu viene generato dinamicamente in code-behind).

Vorrei nominare i miei comandi CommandGetSomething , nel qual caso potrei avere ExecuteGetSomething , CanExecuteGetSomething e MenuItemGetSomething in modo che tutte le parti per i diversi comandi siano almeno alfabeticamente accanto a ciascuna altro ( ExecuteDoSomething sarebbe prossimo a ExecuteGetSomething sarebbe prossimo a ExecuteWriteSomething ).

Sto anche provando a risolvere il problema giusto qui? ViewModel ha circa trenta diversi comandi, oltre ad altre cose, quindi è importante che il file sia ordinato logicamente. Io uso ReSharper per ordinare i contenuti, e mentre vorrei poter ordinare direttamente il nome del tipo, il più vicino che posso ottenere è alfabeticamente (che è il valore predefinito).

    
posta Michael Brandon Morris 29.07.2016 - 20:39
fonte

3 risposte

5

Questo è in genere definito "Notazione ungherese" ed è in gran parte disapprovato da ogni fonte che abbia mai visto.

Il problema è, cosa succede se cambi il tipo sottostante in fondo alla strada? Ora sei costretto a rinominare tutte le variabili associate o a gestire un nome potenzialmente fuorviante.

Certo, con un buon IDE puoi facilmente rinominare in blocco se necessario, ma allo stesso tempo, se hai un IDE abbastanza capace da estrarlo, è probabile che sia anche in grado di dedurre automaticamente digita, e magari mostra anche la documentazione associata.

Lascia che il linguaggio e l'IDE si occupino della digitazione. Codificare quell'informazione nei tuoi nomi apre il potenziale di errori lungo la strada quando le cose cambiano inevitabilmente.

    
risposta data 29.07.2016 - 23:28
fonte
0

Ho sempre inserito il nome dell'interfaccia o della classe che sto implementando / ereditando alla fine.

Credo che dovrebbe essere GetSomethingCommand . Naturalmente se si implementano interfacce multiple, la convenzione non funziona, quindi usala con giudizio.

L'ho preso da MSDN:

The second part of the derived class's name should be the name of the base class. For example, ApplicationException is an appropriate name for a class derived from a class named Exception, because ApplicationException is a kind of Exception. Use reasonable judgment in applying this rule. For example, Button is an appropriate name for a class derived from Control. Although a button is a kind of control, making Control a part of the class name would lengthen the name unnecessarily.

link

    
risposta data 29.07.2016 - 22:06
fonte
0

Ci sono molti riferimenti interessanti che raccomandano di non codificare i tipi all'interno dei nomi di variabili:

Tutti gli argomenti proposti sull'argomento sono piuttosto neutrali e dovrebbero essere applicabili anche a C #.

Ma come ogni cosa relativa allo stile e alle convenzioni, questa raccomandazione non deve diventare un dogma. R.C.Martin raccomanda anche che i nomi rivelino le intenzioni. Nel tuo caso sei in una zona grigia: non è consigliabile codificare il tipo Command come prefisso. Tuttavia, l'avvio di una variabile con Command rivela anche le intenzioni relative alla variabile.

    
risposta data 29.07.2016 - 23:58
fonte

Leggi altre domande sui tag