Buone pratiche per tenere le costanti nel proprio file? [duplicare]

1

Ho notato che alcuni progetti amano memorizzare le costanti nel proprio file, cioè le costanti usate 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.

Comprendo che quando si scrive una classe OOP si desidera mantenere tutte le costanti nell'intestazione del file di classe in modo che possano essere referenziate staticamente come tali:

myCar.setColour(Colour.RED);

Dove RED è una costante di colore nella classe Colour .

Che cos'è la pratica buona per avere una grande quantità di costanti, dovrebbero essere solo nella parte superiore del tuo file principale o è in qualche modo consigliabile avere una classe ProgramConstants che è puramente statico, pubblico e disponibile da leggere?

    
posta insidesin 17.07.2015 - 12:19
fonte

1 risposta

7

L'idea alla base di incapsulamento nella programmazione orientata agli oggetti sta spostando i dati e il codice che lo usa insieme.

Non c'è "ma i dati sono costanti, trattali in modo speciale". Se hai colori, mantienili in una classe Color . La classe Calendar di Java contiene costanti di campo del calendario. BigDecimal e BigInteger contengono ciascuno costanti del proprio tipo.

L'idea è che le costanti di riferimento coinvolgono il loro ambito: BigDecimal.ZERO per esempio. So che è uno zero decimale perché ho digitato BigDecimal.ZERO e non BigInteger.ZERO .

Uno dei peggiori anti-schemi a questo riguardo è avere una "interfaccia costante" che è onestamente pigra e poco chiara. A volte ti imbatti in un'interfaccia contenente un insieme di costanti casuali messe insieme e le classi implementano l'interfaccia solo per rendere più facile fare riferimento alle costanti. Questo generalmente finisce per violare LSP e rende difficile determinare cosa fanno quelle costanti.

Le costanti dovrebbero essere:

  • Un enum se appropriato, come java.math.RoundingMode . I campi del calendario Java creati prima della presenza di enum dovrebbero essere enumerati. Ciò necessariamente li spazia correttamente e assicura che le altre costanti non si trovino nello stesso spazio dei nomi (campo statico finale della classe).

  • Situato nella classe che definisce il loro tipo, se appropriato. Questo copre i numeri riutilizzabili su BigDecimal per esempio.

  • Individuato da qualche altra parte dove le costanti come sono insieme e non sono mescolate con altre, a differenza delle costanti.

Si potrebbe sostenere che questa è una questione di opinione. Sento che se hai chiesto ad un gruppo di esperti di confrontarti, ad es. BigDecimal e alcune classi di costanti AWT casuali, arriveremmo a un consenso sul fatto che ci sono alcune pratiche veramente cattive nella realtà e alcune che rendono il codice più chiaro e più facile da capire.

    
risposta data 17.07.2015 - 13:03
fonte

Leggi altre domande sui tag