Disclaimer:Le seguenti regole non sono rigide e veloci. Queste sono solo le mie opinioni e preferenze personali. Personalmente trovo che rende il mio codice più facile da leggere e più facile da mantenere.
Prima una domanda. Dove hai trovato questo consiglio? Hanno fornito qualche razionale?
Nella mia esperienza, ho utilizzato normalmente enumerazioni nidificate private per migliorare la leggibilità e la gestibilità del mio codice. Questo in particolare entra in gioco quando si esegue un'integrazione con un altro sistema e si devono inviare stringhe o numeri specifici. Trovo che l'uso di enum faciliti la lettura e la manutenzione. In questo caso specifico, l'informazione trasmessa dall'enumerazione è limitata alla classe (cioè, non ha senso al di fuori della classe e nessun altro dovrebbe averne bisogno).
Non riesco a pensare a una ragione definitiva che spieghi perché le enumerazioni interne pubbliche sono una cattiva pratica. Ma qui ci sono motivi per cui non (normalmente) li usano:
- Se l'enum è pubblica, significa essenzialmente che trasmette informazioni in un ambito più ampio (ad esempio, ha senso al di fuori della portata della sua classe padre e quindi probabilmente significa che altre cose lo stanno usando). Se questo è il caso, allora potrebbe essere più sensato renderlo un enum autonomo.
- Lo trovo
ThirdPartyResponseCodes.Success
più facile per gli occhi anziché ThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success
. Non vi è alcun motivo per cui non si possa nominare l'enumerazione in modo appropriato per fornire un contesto e quindi renderlo un enume autonomo.
- Immagino che le stesse ragioni per non usare le classi interne pubbliche si applichino anche alle enumerazioni interne pubbliche. Prima di tutto, se hai una classe interiore, potrebbe significare che la tua classe esterna potrebbe beneficiare del refactoring. Forse la tua classe esterna sta cercando di fare troppo?Il rovescio della medaglia però, vi è il vantaggio dell'incapsulamento e dell'ambito limitante, specialmente se si può sostenere che la classe interiore ha senso solo nel contesto della classe esterna (che dovrebbe andare senza dire se è privata). Se è una classe interna pubblica, allora questo probabilmente significa che il suo ambito si estende oltre la classe esterna e quindi dovrebbe essere estratto.
- Se davvero hai bisogno di usare un enum nidificato pubblico dovresti documentare esattamente perché ne avresti bisogno (non ho ancora trovato una ragione per farlo) e perché è meglio lasciarlo come enum annidato pubblico e non un enume pubblico indipendente.
fonte
2010-11-10 22:05:53
dove hai letto a riguardo? puoi indicare quell'articolo –
Quando dici di "imbattersi" in questo stadard. Come e dove Sicuramente dovunque affermasse avrebbe dato qualche ragionamento. – David
Sfortunatamente, non riesco a collegarmi all'origine come era nella forma di una e-mail aziendale interna. Il ragionamento è stato breve e citato rendendo più facile il debugging e seguendo le convenzioni java. – AEW