È meglio usare stringhe o int per fare riferimento alle enumerie al di fuori della parte java del sistema?

9

Durante il mio lavoro stavamo discutendo dell'uso dell'enumerazione in Java.

Un collaboratore sosteneva che quando si utilizza l'enumerazione sul lato server, ogni volta che è necessario si dovrebbe usare la stringa per fare riferimento ad esso (ad esempio quando si inviano dati da JS al server o quando si memorizza nel database), sostenendo che questo è molto più chiaro per lo sviluppatore e anche sostenendo che avrebbe fallito velocemente in caso di errori di battitura.

Ho sempre usato gli interi per identificare le enumerazioni in questi casi, perché sarebbero identificatori immutabili e non avrebbero problemi di maiuscole e minuscole (anche se un dev ha commesso l'errore di usare il valore 2 anziché 1, non fallirebbe veloce).

Essendo molto analitici su questi argomenti, direi che usare le stringhe è meglio, ma ho una strana sensazione (come se non fosse un buon approccio).

C'è qualche buona pratica in merito a questa discussione che potrebbe guidarmi?

Modifica: ogni volta che è possibile, usiamo l'enum stesso, quindi tutto il nostro codice Java usa Enum. Con "riferimento a un enum" intendo: fare riferimento al valore dell'enumerazione quando si scambiano dati da JavaScript al server o si memorizzano dati nel database

    
posta JSBach 16.12.2014 - 13:46
fonte

2 risposte

13

Buona domanda. L'uso di enum in Java è pensato principalmente per gestire informazioni di natura piuttosto categorica. L'esempio classico di usare enum per gestire i quattro tipi di semi che una carta potrebbe avere. Fornisce tutti i vantaggi in termini di prestazioni dell'utilizzo di un numero intero ed è anche chiaro nel tuo programma.

Quindi, al di fuori di Java, perché non dovresti continuare ad usare un intero? Forse non hai i tipi di enum al di fuori di Java, anche se ciò non significa che non puoi continuare a usare numeri interi a fini di prestazioni, giusto? Sì, è completamente vero, anche se considera cosa succede quando aggiungi un nuovo valore enum. Se non lo aggiungi alla fine, tutti gli altri valori enum dopo il nuovo valore saranno aumentati di uno. Bene, specificheremo il numero in modo che non possa cambiare o lo aggiungeremo sempre alla fine. Sei sicuro che i tuoi colleghi colleghi faranno sempre proprio questo? Meh? Probabilmente? Fiduciosamente? Forse non sei al 100% su questo. Tienilo a mente per un secondo.

Il tuo capo ti dice che c'è un casino al client che usa il tuo software dopo l'ultimo aggiornamento. Ora tutte le entità X si comportano come se avessero assegnato il valore enum Y anche se sono state realmente assegnate a Z. Controlla il repository e sì, qualcuno ha aggiunto un nuovo valore enum e non ha seguito le tue linee guida come richiesto. Ora avete l'ulteriore complicazione che sulla base di dati è scritto 4, quando in realtà dovrebbe essere di 3, escluso record che sono stati inseriti prima dell'aggiornamento che in realtà sono 4 Quale valore di enum appartiene comunque a 4? Non è vero? Non puoi ricordare. È necessario controllare il programma per verificare. In poche parole, è un casino.

Se invece il tuo database ha scritto "CUORI", "DIAMANTI", "SPADES", "CLUB", hai perso poco spazio e guadagnato tanto. È vero che stiamo parlando di un piccolo successo nelle prestazioni, ma in realtà non dovresti accedere al database spesso per fare la differenza. Per quanto riguarda lo spazio, lascia che sia l'amministratore di sistema (non il tuo problema.).

Se hai realizzato un programma semplice a cui è facile apportare modifiche, a lungo termine ti sei fatto un favore, fidati di me. Questo aspetto non è diverso a mio modesto parere.

    
risposta data 16.12.2014 - 14:16
fonte
1

Sono d'accordo con la risposta di Neil, ma solo un'aggiunta:

Nelle enfasi java ci sono oggetti, quindi possono avere campi e metodi. Quindi puoi dare a ciascun enum un valore specificato manualmente e, quando lo fai riferimento per il lavoro esterno, usa invece quel valore.

Sopravviverà sia l'aggiunta / rimozione / riordino e la modifica del nome dell'istanza di enum. Ma dovrete scrivere la logica di serializzazione / deserializzazione per i campi enum invece di usare l'automagic disponibile in molti strumenti. (È facile, ma è un lavoro aggiuntivo).

E devi mantenere questi valori univoci manualmente (ma è lo stesso in enumerazioni in stile C), e puoi scrivere test per verificarlo.

    
risposta data 17.12.2014 - 12:44
fonte

Leggi altre domande sui tag