Il Model è la componente di MVC dedicata all'acceso ai dati, che si occupa cioè di fare da tramite tra l'applicazione e il database sottostante.
Parlare di Model come di un insieme di metodi e classi per accedere ai dati non è però corretto. Il Model infatti non soltanto fornisce fisicamente l'accesso ai dati, ma si preoccupa anche di creare il necessario livello di astrazione tra il formato in cui i dati sono memorizzati alla fonte e il formato in cui i livelli di Controller e View si aspettano di riceverli.
Possiamo rendere più concreto quanto abbiamo appena detto pensando all'interazione di una applicazione con un qualsiasi database relazionale. In quest'ultimo i dati sono vincolati da regole logiche ed organizzati in tabelle. La nostra applicazione tuttavia non può agire su questi dati direttamente nel formato in cui sono salvati, aspettandosi di riceverli sotto forma di oggetti eleborabili dal linguaggio di programmazione. Nella filosofia MVC il Model è la componente responsabile della traduzione dei dati.
Ad esempio, nel progetto allegato alla guida abbiamo un database SQL Server in cui sono memorizzate le informazioni delle immagini della galleria, ma troveremo anche una classe scritta in C# ed inserita all'interno del Model
tramite cui questi dati possono essere elaborati dall'applicazione. Controller e View pur non conoscendo il formato nativo dei dati riescono a modificarli interagendo con il Model.
Il Model fornisce quindi una interpretazione intermedia dei dati, arricchendoli talvolta anche con informazioni non direttamente reperibili dalla base di dati. Ad esempio, nel caso di un forum di discussione potremmo avere la data di nascita di un utente salvata all'interno del database, ma sarà il Model a preoccuparsi di controllare se oggi è il compleanno dell'utente segnalandolo all'interno dell'oggetto C# utilizzato dall'applicazione.
Concludiamo la nostra introduzione al Model con una precisazione: pur contenendo le classi che gestiscono l'interazione con il database, il Model non contiene direttamente i dati. Per questo, anche i database formati da un solo file, come SQL Server Express o SQLite, non saranno considerati parte del Model ed andranno inseriti nell'apposita cartella App_Data
del sito internet come avviene anche per ASP.Net classico:
Diverse tecnologie, un solo Model
Il pattern MVC non fornisce alcuna indicazione riguardo le tecnologie utilizzabili all'interno del Model, lasciando completa libertà di scelta agli sviluppatori: potremo quindi scegliere la tecnologia che più si adatta ai nostri scopi, necessità sempre più importante anche a causa dell'ampio numero di fonti (database relazionali, XML, web services, solo per citarne alcune) da cui recuperare informazioni.
Per garantire il più alto grado di flessibilità ASP.Net MVC non introduce nuovi componenti dedicati all'interazione con le basi di dati, preferendo utilizzare allo scopo altre tecnologie presenti nel framework .Net come ADO.Net, LINQ To SQL o Entity Framework.
Grazie alla struttura fortemente modulare di MVC saremo inoltre in grado di utilizzare come Model per le nostre applicazioni anche tecnologie e librerie esterne al framework .Net, possibilità particolarmente interessante perchè in grado di offrire supporto a database come MySQL ed Oracle non direttamente accessibili con i soli strumenti del framework.
A causa della sua struttura, inoltre, MVC si adatta particolarmente bene ai sistemi ORM (Object Relational Mapper) come NHibernate.
In questa guida forniremo una piccola panoramica sull'utilizzo di LINQ To SQL all'interno di un progetto MVC.