Questa è probabilmente una domanda ingenua, ma sto cercando di capire le best practice del settore per lavorare con numeri magici e i relativi testi di visualizzazione. Ad esempio, se una transazione è debito o credito potrebbe essere memorizzata come un campo di bit nel database, ma il vero / falso / 0/1 deve essere visualizzato come "Debito" o "Credito" ecc. In genere, ci sarebbe un enum che deve essere mantenuto sincronizzato con i numeri magici e il loro significato.
Ci sono due casi specifici che sto cercando di risolvere -
-
Vogliamo tradurli in testo leggibile dall'uomo - L'interfaccia utente deve sapere che quando vede zero, deve visualizzare "Debit" ecc.
-
Vogliamo lavorare con i numeri magici all'interno del codice sorgente - Qui di solito li traduciamo come enumerazioni. Gli Enum si liberano dei numeri magici ma sono così difficili da mantenere sincronizzati con i valori del database.
In un'applicazione di dimensioni moderate, possiamo finire con centinaia o migliaia di tali traduzioni, ad esempio -
Contesto - {Valore, traduzione}
TransactionType - {0, Debit}, {1, Credit}
FileType - {0, CSV}, {1, XML}, {2, Excel}
ItemType - {0, Manual}, {1, Automated}, {2, Writeoff}, {3, System}
Stato - {0, Attivo}, {1, InActive}, {2, In attesa}, {3, Consegnato} ecc. ecc.
Non riesco a capire una soluzione che permetta di sincronizzare / caricare le enumerazioni dinamicamente dal database E permette di tradurre i valori del database in testo senza perdere l'integrità referenziale.
Vedo le seguenti opzioni -
- Hardcoding nell'interfaccia utente (visualizzazioni o tramite metodi GetDisplayTextFor (int), ecc.)
- Alcuni file di testo / XML esterni
- Una tabella di database con colonne (Contesto, Valore, Traduzione) - Ma ora abbiamo creato nuovi numeri magici nella colonna "Contesto".
- Tabelle di database per ogni set di tali mapping con valori che fanno riferimento a chiavi esterne - Ciò consentirà l'integrità referenziale ma implicherà l'aggiunta di tabelle potenzialmente numerose.
Quali sono le pratiche del settore per questo problema? Le enum possono essere generate dinamicamente dal database e possono essere convertite in testi o le enumerazioni dovrebbero essere evitate del tutto per tali casi? Qualsiasi altra soluzione / schema standard che risolva almeno il maggior numero possibile di problemi?