Quando usare LINQ to SQL?
Un commento al mio post precedente su ADO.NET Entity Framework contiene la domanda fatidica: che fine farà LINQ to SQL? E implicitamente ne contiene un'altra altrettanto importante: quando usare LINQ to SQL?
Andiamo con ordine: LINQ to SQL sarà supportato per almeno 10 anni. Fa parte di .NET Framework 3.5, la sua interfaccia pubblica sarà mantenuta anche nelle prossime versioni di .NET Framework. Difficile che facciano marcia indietro su questo, almeno nel breve. Ma sicuramente potrebbero cambiarne l'implementazione. Questo è un argomento molto più complesso che però non siamo in grado di analizzare almeno fino a che non vedremo (a PDC 2008?) quali sono i piani per .NET 4.0. Nella peggiore delle ipotesi, non evolverà dallo stato attuale.
Ciò detto, veniamo alla seconda domanda, che non può non tenere conto delle considerazioni precedenti. Premetto che quello che segue è una mia personale opinione e non rappresenta una posizione espressa da Microsoft in alcuna sede, ufficiale e non.
LINQ to SQL va bene in molti scenari che mi trovo ad affrontare con una certa frequenza. Raggruppati per categorie:
- Procedure batch di trasformazione/elaborazione di dati.
- Tipicamente sono fatte apposta per un database (SQL Server nel nostro caso) e sono scritte in C# perché con T-SQL o SSIS non si avrebbe a disposizione uno strumento adeguato
- Esempi: algoritmi di valorizzazione del magazzino; procedura di import formati custom (binari o ascii con strutture variabili); ...
- Semplici interfacce di manutenzione di un database (es. a scopo amministrativo, edit tabelle di configurazione et simili)
- Accesso a database locali (es. per contenere dati di configurazione)
Probabilmente ve ne sono altre, ma è importante sottolineare quello che manca e che oggi non scrivere usando LINQ to SQL:
- Applicazioni enterprise e/o n-Tier (salvo usare LINQ to SQL per alcune parti del DAL, ma la cosa richiederebbe una lunga discussione)
- Framework per sviluppo ERP
- Implementazioni ERP - insomma il classico "gestionale"
I motivi per non usarlo in questi casi sono sia implementativi (prestazioni, architettura, ecc.) che strategici (supporto nel lungo periodo, evoluzione in versioni future, ecc.). Mentre i motivi per usarlo nei casi che ho esposto in precedenza sono riassumibili in una parola: produttività.
Ho usato LINQ to SQL in alcuni casi dove ho potuto confrontare il risultato ottenuto con la realizzazione corrispondente senza LINQ to SQL. Semplicemente, aumenta la produttività. Si scrive meno codice, quello che c'è è più leggibile e non si perde troppo in prestazioni (a meno che non dobbiate scrivere molti dati - purtroppo non c'è un supporto diretto al bulk insert e bisogna ricorrere ad ADO.NET). Qualche preoccupazione in più per la gestione degli errori, problematica che però negli scenari che ho descritto è di solito meno critica.
Un aspetto determinante nell'usare LINQ to SQL negli scenari che ho descritto è la facilità di deployment. Se c'è .NET 3.5, c'è tutto quello che serve. Non ci sono altre DLL o altri componenti da installare. Sarà banale, ma su applicazioni con poche centinaia di righe di codice il fatto di dover installare delle librerie aggiuntive su dei server (penso ai batch notturni) può diventare un problema peggiore dei vantaggi dati dall'uso di LINQ to SQL.
Sarei felice di avere dei feedback a queste considerazioni, soprattutto se avete già iniziato a usare LINQ to SQL.