Ho lavorato solo in una volta dal momento della laurea in CS. Questa è una domanda di architettura piuttosto semplice, ma non ne so di più visto che ho lavorato solo in un posto. Dove lavoro gestiamo un gran numero di tabelle di codici. Ad esempio, supponiamo di avere un sistema di vendita / ordine e di avere uno stato dell'ordine. Manteneremmo una tabella degli stati dell'ordine che sarebbe simile alla seguente:
OrderStatus:
OrderStatusId(PK TinyInt) OrderStatusDesc(VarChar(50))
1 Created
2 Submitted
3 Processing
4 Canceled
5 Verified
6 Complete
Quindi creiamo un'enumerazione su ogni tabella di codici. Ad esempio:
Public Enum TblSalesOrderStatus
eosCreated = 1
eosSubmitted = 2
eosProcess = 3
eosCanceled = 4
eosVerified = 5
eosComplete = 6
End Enum
Quindi nel nostro codice abbiamo codice come il seguente:
If OrderStatus = eosCreated OrElse OrderStatus = eosSubmitted Then
...do some work
End if
Su ogni schermata che creiamo, abbiamo gli ID memorizzati nei controlli (come i combobox). Non so qualcosa su questo mi ha sempre fatto pensare al suo cattivo design. Forse ho sbagliato comunque. Soprattutto quando ho iniziato a entrare in progettazione REST. volevo passare gli Id piuttosto che le descrizioni. Naturalmente questo non sembra giusto dal momento che sarei l'unico che abbia mai visto passare quel tipo di Id in un servizio REST. Quindi questo cattivo design?
Modifica:
Cercando di rendere la cosa un po 'più chiara. Le tabelle di codici sono archiviate solo in due punti: The Enum + The Database. Quando abbiamo bisogno di un nuovo ID quando inviamo un'email al nostro personale del database che crea un nuovo valore di tabella di codici per noi e ci restituisce l'ID. Quando poi metti il nuovo valore nelle nostre enumerazioni. Non abbiamo mai avuto problemi con la sincronizzazione, ma se è stato necessario eliminare i valori o modificarli in passato (l'aggiunta è semplice) è stato un problema perché è stato necessario ricompilare tutto nel sistema.
Siamo andati lungo il percorso cercando di rendere le cose semi-dinamiche (il che non funziona in ogni caso, ma aiuta in alcuni). Ci sono un sacco di esempi, ma un semplice esempio è che abbiamo un flag IsVisible in alcune delle tabelle di codici. Se vogliamo mai diventare obsoleti o rendere uno dei valori non selezionabili, impostiamo il flag IsVisible = 0. Preferiscono questo rispetto al dover cambiare codice / compile / deploy. Pensandoci penso che sarebbe preferibile averlo nella logica del buisness e testarlo (cosa che non facciamo :-() a seconda delle tue prospettive.