Una domanda imbarazzante e aperta, ma è un problema a cui mi imbatto sempre:
Il software facile da gestire e da utilizzare è un software ben progettato. Cercare di rendere intuitivo un progetto significa nominare i componenti in modo tale che lo sviluppatore successivo sia in grado di inferire la funzione del componente. Questo è il motivo per cui non chiamiamo le nostre classi "Tipo1", "Tipo2", ecc.
Quando si modella un concetto del mondo reale (ad es. Cliente), questo è generalmente semplice come nominare il proprio tipo dopo il concetto del mondo reale che viene modellato. Ma quando costruisci cose astratte, che sono più orientate al sistema, è molto facile rimanere senza nomi che siano sia facili da leggere che semplici da digerire.
Peggiora (per me) quando provo a nominare famiglie di tipi, con un tipo base o un'interfaccia che descrive cosa devono fare i componenti, ma non come funzionano. Ciò porta naturalmente a ogni tipo derivato che cerca di descrivere il sapore dell'implementazione (ad esempio IDataConnection
e SqlConnection
in .NET Framework), ma come si esprime qualcosa di complicato come "funziona riflettendo e cercando un insieme specifico di attributi"?
Quindi, quando hai finalmente scelto un nome per il tipo che ritieni descriva cosa sta cercando di fare, il tuo collega chiede "WTF fa DomainSecurityMetadataProvider
davvero questo ? "
Esistono buone tecniche per scegliere un nome ben intenzionato per un componente o come costruire una famiglia di componenti senza ottenere nomi confusi?
Esistono dei semplici test che posso applicare a un nome per capire meglio se il nome è "buono" e dovrebbe essere più intuitivo per gli altri?