Restituire un enum, invece di String, è troppo restrittivo qui:

1

Attualmente, ci sono solo 3 possibili editori. Potrei voler aggiungere un po 'di più in futuro:

interface NewsArticle {
    enum Publisher { NYPost, ChiTribune, LATimes }

    Publisher getPublisher();
}

Mi piace la rigidità dell'uso di enum , ma quando potrei incappare se considero il publisher come enum invece di String ?

    
posta konishiki 11.02.2016 - 22:04
fonte

4 risposte

3

Generalmente non dovrebbe esserci la necessità di ricostruire un'applicazione quando vengono introdotti nuovi dati. Se non è necessario definire e implementare una logica correlata al publisher ogni volta che viene introdotto un nuovo Publisher, enum è una scelta sbagliata.

Dove esattamente nella tua applicazione devi fare riferimento a un certo editore? Hai qualche logica legata all'editore nella tua applicazione? Come

if (article.getPublisher().equals(Publisher.NYPost) {
   doSomethingNyPostRelated();
}

Hai qualche riferimento? Se non ne hai, non dovresti avere un set codificato di editori, come enum o altro.

I like the rigidity of using enum, but when might I get tripped-up if I treat the publisher as an enum instead of a String?

Che ne dici di una classe Publisher che non è un enum?

public class Publisher {
    private final int id;
    private final String name; // perhaps?
    ...
}

Ciò ti darebbe più rigidità di una stringa senza essere limitata a solo alcuni editori predefiniti codificati. In primo luogo, sarete in grado di controllare la creazione, la validità e l'uso degli editori. Secondo, avresti il tipo di sicurezza: non saresti in grado di passare o restituire una stringa casuale come un editore. In terzo luogo, puoi leggere un insieme predefinito di Publisher da un database o da un file di configurazione, qualunque sia il preferito:

public class PublisherRepository {
    public List<Publisher> getAllPublishers() {
         // read publishers from db or config file
    }
}

Ovviamente potresti anche avere il tuo PublisherRepository che restituisce un elenco di editori con codice fisso all'inizio. Cambiare una soluzione hard codamente strutturata non sarebbe difficile come sostituire un enum.

    
risposta data 12.02.2016 - 11:56
fonte
1

Un possibile attacco potrebbe essere l'uso di un "enum dinamico", che non è standard. Si leggono i valori possibili da un file in un tempo di caricamento. Quindi è "solo" modificare un file di testo, non ricompilare. per es.

link

Non ho esperienza con queste cose così caveat emptor . Probabilmente non vale la pena ma YMMV.

    
risposta data 11.02.2016 - 22:44
fonte
0

Come da commento di Robert Harvey :

That shouldn't be an enum. Adding a publisher requires you to recompile the application.

questo è tutto ciò che devo sapere.

    
risposta data 11.02.2016 - 22:28
fonte
0

Ci sono solo due modi:

Uno è quello di utilizzare fonti esterne come file o database e il secondo è la ricompilazione.

Non fa differenza se è una stringa o Enum se le opzioni risiedono nel codice.

    
risposta data 11.02.2016 - 23:20
fonte

Leggi altre domande sui tag