Non posso usare un enum a livello di applicazione se ho una relazione NxN?

4

Dopo aver letto le risposte a questa domanda e questo e questa domande correlate, ora sono confuso su come / se lavorare con un enum avere una relazione NxN.

Diciamo che ho un'entità Hotel , un mio hotel può offrire alcuni servizi: sauna, palestra, wifi, ecc. Seguendo

You should decide whether your Platform is an entity or not. If it's an entity, it can't be an enum

Da qui e

The set of valid values is data, not code

Da qui , e se ho capito tutto correttamente, il mio approccio alla modellazione di questo con l'enum in DB deve avere una tabella hotels , una tabella services e una tabella di giunzione hotels_services . La tabella dei servizi avrebbe due colonne (id, service) o solo una (service) . Quando si salvano le informazioni sugli hotel, la validità dei servizi sarebbe applicata non dall'applicazione ma dal DB. La mia classe Service avrebbe quindi due campi ( Long id, String service ) o solo uno ( String service/value ). La mia Hotel class avrebbe un List<Service> services .

Finora, tipo di bene. Ma se la logica della mia applicazione dipende in qualche modo dal tipo di servizio, mi piacerebbe avere la sicurezza del tipo di enum. Mi sembra difficile, perché allora dovrei convertirli in un enum di ServiceEnum , il che suona proprio sbagliato: da qualche parte avrei bisogno di fare la conversione, e lì avrei bisogno di hardcode i valori possibili, quindi la duplicità. Quindi, ho questa classe extra ServiceEnum che confonde.

È così che dovrebbe essere? Basta rinunciare a usare un enum in questo caso? Posso conviverci, ma mi piacerebbe sapere che ho bisogno di, o che cosa fanno le persone in questi casi.

    
posta Luis Sep 17.12.2015 - 16:21
fonte

1 risposta

5

Stai confondendo due idee. La relazione tra Hotel e Service sta per essere uno-a-molti o molti-a-molti a seconda che gli oggetti Hotel abbiano proprietà su un Service o se Service verrà comunemente condiviso tra tutti Hotel . Puoi farlo in entrambi i modi, poiché entrambi hanno vantaggi e svantaggi, ma la cosa importante da notare è che potresti avere una quantità potenzialmente illimitata di Service associata a Hotel .

Oggi hai "Servizio in camera", "Piscina" e "Servizio lavanderia" tra cui scegliere e domani avrai "Servizio in camera", "Piscina", "Servizio lavanderia" e "Parcheggio". Sebbene tu possa rappresentare questo con enum, è meglio che tu non lo faccia. Tieni presente che le voci nella tabella Service ora hanno solo un nome, ma in seguito potresti voler aggiungere altri campi. Service è tanto un'entità quanto Hotel , quindi dovrebbe essere trattato così.

In altre parole, dovresti avere una classe Service e non un enum per gestire% istanze diService. Rappresentare Service come classe non solo rappresenta meglio quella tabella di database, ma renderà la manutenzione futura molto più semplice. Aggiungendo diciamo, le localizzazioni per ogni servizio riguardano solo l'aggiunta di una tabella figlio. Se lo gestissi come enumerazione, dovresti mantenere un pacchetto di risorse statiche che si espande per rappresentare nuovi possibili valori di ServiceEnum mentre li aggiungi al tuo programma e, anche se non lo realizzeresti, avresti essenzialmente prova ad emulare ServiceEnum nel tuo programma come se fosse un'entità Service comunque.

Tutto si riduce a rappresentare correttamente questo oggetto nel tuo programma, e il modo migliore per farlo in questo caso è trattarlo come qualsiasi altra entità.

    
risposta data 17.12.2015 - 16:46
fonte

Leggi altre domande sui tag