Una domanda imbarazzante, aperta, ma è un problema con cui mi scontro sempre:
Il software facile da gestire e gestire è progettato correttamente dal software. Cercare di rendere intuitivo un design significa nominare i componenti in modo tale che il prossimo sviluppatore debba essere in grado di dedurre la funzione del componente. Questo è il motivo per cui non chiamiamo le nostre classi "Type1", "Type2", ecc.
Quando modellizzi un concetto del mondo reale (ad es. un cliente) questo è generalmente semplice come nominare il tuo tipo dopo che il concetto del mondo reale è stato modellato. Ma quando costruisci cose astratte, che sono più orientate al sistema, è molto facile rimanere senza nomi facili da leggere e da digerire.
Diventa peggio (per me) quando provo a nominare famiglie di tipi, con un tipo di base o un'interfaccia che descrive cosa devono fare i componenti, ma non come funzionano. Ciò porta naturalmente a ciascun tipo derivato cercando di descrivere il sapore dell'implementazione (ad esempio IDataConnection
e SqlConnection
in .NET Framework), ma come esprimere qualcosa di complicato come "funziona con la riflessione e cercando un insieme specifico di attributi "?
Quindi, quando hai finalmente scelto un nome per il tipo che pensi descrive cosa sta cercando di fare, il tuo collega chiede "WTF fa questo DomainSecurityMetadataProvider
effettivamente do? "
Esistono buone tecniche per scegliere un nome ben intenzionato per un componente o come costruire una famiglia di componenti senza ottenere nomi confusi?
Ci sono dei test semplici che posso applicare a un nome per capire se il nome è "buono" e dovrebbero essere più intuitivi per gli altri?