Enum o dizionario per il parametro in memoria

1

Ho una tabella UserItems {ID, UserID, ItemID}

Gli articoli devono essere nella RAM (non nella tabella db).

Che cosa è meglio per questo? Come enum con attributi o come dizionario di oggetti?:

enum Items
{
    [InternalParam("x432", 34)]
    Red = 1,
    [InternalParam("x431", 12)]
    Green = 2,
    [InternalParam("x438", 54)]
    White = 3
}

o

enum ItemsIds {Red=1, Green=2, White=3}
Dictionary<ItemsIds, Item> Items = new Dictionary(){
    {Red, new Item("x432", 34)},
    {Green, new Item("x431", 12)},
    {White, new Item("x438", 54)},
}
    
posta GLeBaTi 14.11.2017 - 10:28
fonte

1 risposta

2

Se sei assolutamente certo che gli ID non cambieranno e che gli ID sono e saranno lineari, il primo sarebbe preferibile, dal momento che puoi semplicemente afferrare l'enum usando l'id come ordinale.

Anche se a mio modesto parere, faresti un favore a te stesso assumendo che gli id possono cambiare se devi cercare l'enum dato il suo id oggetto. Il mio ragionamento è così: supponiamo che il tuo cliente abbia un problema con la versione attuale del tuo programma, e in esso ci sono 15 elementi e quindi 15 enumerazioni per ogni id. L'unico modo per risolvere il problema è tornare a una versione precedente che, così, capita di utilizzare gli elementi 14 e 14 . Scenario migliore , semplicemente non puoi, altrimenti rischi di leggere l'elemento con id 15 dal database e il tuo programma non ha l'enumerazione per esso.

Naturalmente lo scenario peggiore è in realtà l'aggiornamento del programma alla versione precedente e la creazione di un sacco di problemi inaspettati. Bottom line: tratta gli elementi come enum o dati del database persistenti, ma NON ENTRAMBI.

Se non riesci a eliminare la necessità di usare gli ID oggetto provenienti dal database, non dovresti usare enumerazioni, si anche se non pensi che cambieranno e sì < em> even se sono solo 15 oggetti che puoi tenere in memoria. Fai uno sforzo extra. Puoi caricarlo all'avvio del programma e nessuno sarà più saggio.

    
risposta data 14.11.2017 - 14:52
fonte

Leggi altre domande sui tag