Sto lavorando con un sistema esterno che invia a noi dati simili all'evento. Un SDK esistente dei ragazzi di terze parti analizza il JSON, quindi alla fine otteniamo qualcosa come la seguente classe:
public class Event
{
public string Type;
public dynamic Data;
}
I requisiti sono i seguenti:
-
Tutti gli eventi dovrebbero avere un gestore predefinito.
-
I tipi di eventi specifici potrebbero avere un gestore che sovrascrive quello predefinito e fa qualcos'altro (il codice e la duplicazione logica nei gestori non sono un problema al momento).
-
Il tipo di eventi può variare, quindi dovremmo essere in grado di spostare facilmente l'evento dal loro gestore specifico a uno predefinito o viceversa.
La soluzione che ho pensato è stata quella di fornire un dizionario con la mappatura di string a Type, dove Type sarebbe un tipo di gestore. Quindi, un gestore appropriato verrebbe creato tramite riflessione e gli verrà passato un evento da gestire. Se la chiave non è presente nel dizionario, verrà creato un gestore predefinito. Tuttavia, non sono sicuro che sia il modo migliore e non mi piace avere tre voci nel dizionario che puntano a un tipo, ad es.
'eventA' = > handlerA
'eventB' = > handlerA
'eventC' = > handlerA
Non ho una ragione specifica per non apprezzarla, mi sembra solo che ci possa essere un modo migliore.
Ho anche pensato di usare i generici per questo, ma è più di un'idea vaga e non un concetto concreto in questo momento.
Qualche suggerimento su questo? Sono abbastanza sicuro che il problema non sia unico ma, purtroppo, non sono riuscito a trovare una buona formulazione per cercare.