La più grande novità per lo sviluppatore inclusa nel .NET Framework 3.5 è senza dubbio LINQ. LINQ è l'acronimo per Language INtegrated Query ed è una tecnologia introdotta per permettere la ricerca all'interno di qualunque struttura dati direttamente sfruttando il linguaggio. Grazie a questa tecnologia, si possono scrivere query, in C# o VB, che possono essere eseguite per ricercare elementi in una collection di oggetti, nodi in una struttura XML, o (ben lpiù importante) in un database SQL.
Perchè LINQ
LINQ non è altro che un'estensione del linguaggio che permette di eseguire query verso una determinata risorsa. La risorsa può essere un file XML, un database o una collection di classi e nonostante questo, la sintassi LINQ rimane la stessa.
Scrivere una query per cercare all'interno di un grafo di oggetti è sicuramente più semplice che ciclare gli elementi uno ad uno, alla ricerca di quelli che rispettino tali caratteristiche (LINQ To Objects).
Scrivere una query con LINQ, piuttosto che utilizzare XPath, per ritrovare dati in formato XML, è molto più semplice e veloce dal punto di vista dello sviluppo e della leggibilità del codice (LINQ To XML).
Ma il vero punto di forza di LINQ è nel colloquio con il database. Infatti, i dati contenuti in un database relazionale hanno una rappresentazione che è molto diversa da quella che poi hanno in un modello ad oggetti di un'applicazione. Ad esempio, una classica relazione molti a molti tra prodotti e fornitori (dove un fornitore offre più prodotti, ed un prodotto è venduto da più fornitori) viene rappresentata in un database con una tabella Fornitori, una Prodotti ed una ProdottiPerFornitore che contiene le relazioni. Gli stessi dati vengono rappresentati in maniera molto diversa quando si tratta di utilizzare un dominio di oggetti. Infatti, per lo stesso problema si usano due sole classi e non tre: una classe Fornitori con una proprietà che contiene la lista dei prodotti offerti, ed una classe Prodotti che contiene la lista dei fornitori che li vendono.
Questa diversità viene generalmente gestita dallo strato di accesso ai dati che serve proprio per disaccoppiare l'applicazione dalla base dati. Costruire un DataLayer che mappi dal database alle classi è un'operazione che richiede tempo e che comunque prevede la scrittura di istruzioni SQL che estraggono dati, e di codice per portare questi dati dal formato relazionale al formato ad oggetti come detto in precedenza. Questa operazione può essere fatta realizzando un DataLayer proprietario per l'applicazione, oppure rivolgendosi ad un ORM che, sfruttando opportune configurazioni, è in grado di generare le istruzioni SQL ed il codice necessario ad eseguire le query e popolare gli oggetti.
Tutto questo però ha un costo in termini di performance, di compile-time checking e quindi di velocità di sviluppo. Infatti, le query SQL scritte nel codice o generate automaticamente da un ORM non sono altro che stringhe, quindi possono contenere anche istruzioni errate e l'unico modo per scoprirlo è lanciare l'applicazione. Questo significa che in fase di compilazione non si possono identificare eventuali errori con conseguente perdita di tempo. Inoltre, il dover eseguire le query e popolare degli oggetti può risultare un'operazione lenta, sia in termini di sviluppo che di esecuzione (LINQ To SQL).
Per ovviare a questi problemi è stato introdotto LINQ To SQL che permette di gestire in maniera tipizzata e nativa, all'interno del linguaggio, il mapping tra database ed oggetti.
Tutto questo significa che LINQ non è altro che un'estensione dei linguaggi C# 3.0 e VB 9.0 che sfrutta le nuove caratteristiche dei linguaggi (Anonymous Types, Object Initializers, Lambda Expressions, Extension Methods) al fine di integrare nel linguaggio un motore di querying che può interrogare potenzialmente ogni tipo di struttura dati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.