Mi sto preparando a fare l'aggiornamento di un programma abbastanza grande che è attualmente scritto interamente in MS Access, sia nella GUI che nei dati (codice e dati in file separati). Una delle caratteristiche chiave del prodotto è che gli utenti finali possono aggiungere colonne aggiuntive a diverse tabelle in fase di esecuzione. Ogni nuova colonna può essere uno dei diversi tipi di dati (stringa, data, chiave di ricerca in un'altra tabella, numero intero, ecc.). I valori nelle colonne possono essere un valore immesso direttamente in o una formula basata su altre colonne. I database sono forniti con poche colonne di base e il resto è definito nel campo dai vari utenti finali.
Nell'applicazione, che sarà Winform o WPF, avremo bisogno di legare quei campi ai controlli e alle raccolte di righe sulle griglie. Inoltre, esiste una tabella che contiene i metadati relativi ai campi.
La tabella di base ha uno schema simile a:
ID as integer
Name as string
CategoryID as integer
Price as Decimal
Ci saranno in genere 70-90 colonne aggiuntive definite dall'utente. La tabella dei metadati presenta le seguenti (e più) colonne per ogni campo (utilizzando i dati per ID dopo ciascuna)
FieldName as String ("Name")
Visible as Boolean (True)
DisplayName as string ("Item Name")
ReportName as string ("Name")
DisplayWidth as integer (20)
ReportWidth as integer (10)
etc (20+ more columns)
Tutti i metadati sono aggiornabili.
Dovrei usare la classe della tabella di dati integrata per gestire tutto questo, o sarei meglio andare con una classe base contenente i campi conosciuti e il codice dinamico compilato in runtime che crea tutte le proprietà appropriate. Se vado con la classe dinamica, dovrei quindi inserire tutti i metadati in un attributo personalizzato?