Ho il problema che voglio essere in grado di catturare un set di messaggi SNMP, e alcuni di loro voglio analizzare per creare un'istanza di una classe definita dall'utente. Potrei ad esempio voler identificare se un messaggio SNMP è un messaggio TRAP, e se lo è voglio identificare il tipo di TRAP e creare un'istanza di questo tipo.
Esempio: Tipo di messaggio SNMP: TRAP: ALARM: MINOR_ALARM
In questo caso voglio istanziare una classe di tipo MinorAlarm, contenente le informazioni dell'allarme e alcune funzionalità ben definite da un'interfaccia (come stampare l'allarme, determinare quando è successo, ...)
Il numero di diversi tipi alla fine diventerà grande e deve essere semplice aggiungere anche nuovi tipi. L'attuale implementazione è molto limitata e disordinata. Fondamentalmente consiste in un'enorme istruzione if-else in cui solo un sottoinsieme dei tipi è supportato in questo momento.
Il nome del tipo SNMP specifico può essere ottenuto dal messaggio SNMP attraverso una stringa come "1.1.1.0.2.6.22.33" (i numeri sono completamente compilati).
Credo che uno schema di fabbrica potrebbe diventare troppo disordinato qui. L'ipotesi è che una sorta di tabella di ricerca funzionerebbe, ma se possibile vorrei evitare l'uso di Reflection (poiché sarà difficile da leggere e capire).
Un pensiero allentato sarebbe quello di utilizzare una sorta di fabbrica astratta con una struttura gerarchica. Questo sarebbe simile alla struttura gerarchica della struttura annidata dell'albero MIB. Questa potrebbe essere l'idea migliore, ma implicherà ancora lo scavare in un pasticcio di if-else o switch. Qualcuno ha qualche buona idea su come procedere?