2015-07-17 14 views
6

Ho notato alcuni progetti come memorizzare costanti nel proprio file, le costanti utilizzate globalmente e nel ciclo del programma principale potrebbero ingombrare il file principale, quindi forse cercano di posizionarle altrove e quindi di riferimento/importare file/classe.Quando devono essere definite le costanti nei propri file?

Capisco che quando si scrive una classe OOP che ci si vuole mantenere tutte le costanti presso l'intestazione del file di classe in modo che possano fare riferimento in modo statico in quanto tale:

myCar.setColour(Colour.RED); 

Dove RED è una costante di colore nella classe Colour.

Qual è buona pratica per avere una grande quantità di costanti, dovrebbe semplicemente essere nella parte superiore del file principale o è in alcun modo saggio avere forse una classe ProgramConstants che è puramente statica, pubblici e disponibili leggere?

+0

Livello di classe per l'utilizzo di costanti all'interno di tale classe. Livello del programma per l'utilizzo delle costanti in un set di classi. –

+0

Qual è la definizione per il livello del programma? Dentro o fuori la classe principale? – insidesin

+0

Penso che la migliore pratica non sia quella di avere grandi quantità di costanti in primo luogo :) – biziclop

risposta

3

cosa è buona pratica per avere una grande quantità di costanti, dovrebbe semplicemente essere nella parte superiore del file principale o è in alcun modo saggio avere forse una classe ProgramConstants

La decisione su dove posizionare le costanti dovrebbe dipendere dal tipo di costante.

La classe Integer nel JDK ha una costante denominata MIN_VALUE che definisce il valore minimo di un valore int. La classe Character definisce una costante denominata MIN_VALUE che definisce il valore minimo di un carattere.

Confrontare l'approccio precedente con l'approccio di definire una classe globale WrapperConstants/enum con due costanti, ovvero CHAR_MIN_VALUE e INT_MIN_VALUE. Presto aggiungerai altre costanti a questo file per altri tipi di dati .. (LONG_MIN_VALUE, FLOAT_MIN_VALUE e così via ...)

Cosa succede quando si desidera definire anche ? Guarda quanto velocemente la tua classe può esplodere? Che dire della leggibilità. WrapperConstants.CHAR_MIN_VALUE è più leggibile di Character.MIN_VALUE? Non proprio.

Definire le costanti nelle classi a cui si riferiscono è la strada da percorrere IMO. Detto questo, non tutte le costanti appartengono alle classi Java/interfacce/enumerazioni. Alcune costanti (ad esempio i messaggi di errore) sono meglio collocate nei pacchetti di messaggi/file di proprietà.

1

Preferisco inserire le costanti in classi in cui appartengono logicamente.

Non inserire costanti non correlate nella classe come ProgramConstants, perché è possibile creare un gruppo di costanti disordinate, che diventeranno difficili da mantenere.

+0

Anche se le costanti sono correlate, non dovrebbero essere inserite in un singolo file. Le classi wrapper in Java sono un buon esempio di costanti correlate che vengono definite nei propri file di classe piuttosto che in un file 'WrapperConstants'. – CKing

1

No, non dovresti mettere tutte le tue costanti nella parte superiore della tua classe principale o nella loro classe, dovrebbero andare in qualsiasi classe con cui sono logicamente associate.

Il problema è che se un programmatore vede un luogo generico per mettere qualcosa, come un file di costanti, allora inserirà tutte le costanti qui per mantenere il modello mentre dovrebbero metterle nel posto corretto e logico. Avere un grande file di costanti rende più difficile lavorare con le costanti in quanto sono prive di categoria e scompongono la modularità. È il tuo ruolo di architetto evitare di progettare un sistema con trappole come queste.

Quindi, ad esempio, si dispone di proprietà di sistema correlate all'esecuzione della propria applicazione Java, quindi con molte di queste costanti nella classe principale. Se si finisce per avere troppi nella classe principale, spostarli in una classe SystemProperties nello stesso pacchetto. Quando un programmatore ha bisogno di diverse costanti per il proprio uso, ad esempio per i colori nel proprio esempio, è necessario creare la propria classe Colors che va nel pacchetto associato a quella funzione che contiene queste costanti.

1

"Ledevono essere definite in un singolo file?"

Assolutamente no. In tutti tranne i più piccoli programmi, ciò creerebbe un singolo punto di contesa/disordine. Molto simile al modello anti 'variabile globale'.

"Le costanti dovrebbero essere nei propri file?"

Ancora, no. A grandi linee, ci sono tre tipi di costante e ognuno deve essere raggruppato nel proprio modo leggermente diverso.

  1. Le costanti che fanno parte dei dettagli di implementazione interna, appartengono al codice di implementazione che le utilizza.
  2. Costanti API pubbliche. Quelle sono le costanti che fanno parte del contratto pubblico esposto di un'API, che appartengono vicino all'API che viene definita.
  3. Configurazione del sistema per il programma. Queste costanti appartengono al codice di bootstrap per il sistema.
Problemi correlati