IMHO la maggior parte dei tuoi argomenti "pro" sono difettosi, ma discutiamoli uno per uno:
If the query needs to change and return a different type, we don't have to remember to rename the result variable.
Se la query restituisce un tipo diverso in modo che un nome come accountDetails
non si adatti più, il codice dipendente da tale variabile dovrà essere modificato, anche se il nome della variabile è solo result
. Questo è decisamente più semplice (e quindi meno incline agli errori) quando la variabile ha un nome specifico. L'unica eccezione qui è IMHO quando non esiste tale codice, come in una funzione in cui result
è appena restituita al chiamante.
That also means code reviews won't be polluted with a bunch of files that have changed due to the renaming.
Se inizi a litigare in questo modo, non dovresti mai rinominare alcuna variabile nel tuo codice, indipendentemente da quanto sia stato scelto male il nome, solo per rendere più efficaci le revisioni del codice. Forse non dovresti mai fare nessun refactoring? Ma non stupirti quando la qualità del tuo codice degrada ogni giorno.
Inoltre, nel tuo esempio, result
ha l'aspetto di una variabile locale, quindi il refactoring di solito non ha effetto su più di un file.
The job of a Web API controller isn't to know the details about what business logic is going on; it's just to invoke something and return it.
Se var result = mediator.Send(query).Result;
è una parte di codice generica e riutilizzabile, che elabora query di tipi diversi e forse restituisce cose diverse, allora questa linea va bene. Tuttavia, se questa fosse la tua situazione, probabilmente non avresti fatto la domanda in primo luogo. Suppongo che in questo caso la query sia sempre un accountFilter
, e il risultato è sempre un accountDetails
, e finché ciò è vero, i nomi delle variabili dovrebbero esprimerlo.
Naturalmente, come ho scritto sopra, se la riga successiva nella tua funzione è solo return result;
, il nome non specifico è ok.
If you really want to know what the line of code is doing, you can look at the context surrounding it.
Sul serio? Volete un altro programmatore di manutenzione per decifrare il contesto circostante per capire cosa sta succedendo, mentre selezionando semplicemente un nome migliore potrebbe salvarlo mezz'ora di lavoro cerebrale? Siate consapevoli che in sei mesi voi potrebbe essere il programmatore di manutenzione per questa linea di codice e vi sembrerà come se qualcun altro l'avesse scritto in primo luogo. Cosa preferiresti in quella situazione? Un nome di variabile che ti dice cosa rappresenta, o uno per il quale devi prima analizzare il codice per essere sicuro di cosa fa?
Quindi, ad eccezione dei casi molto semplicistici in cui l'intera funzione appare come
AccountDetails GetAccountDetails(Query query)
{
var result = mediator.Send(query).Result;
return result;
}
probabilmente starai meglio ad usare un nome più specifico (anche se, anche per una funzione così semplice, un nome di parametro come accountFilter
anziché query aumenterà pesantemente la leggibilità, e in questo esempio, result
parametro è abbastanza inutile, in genere preferirei scrivere return mediator.Send(accountFilter).Result
).