Oggi ho ricevuto un feedback a questo post che mi ha dato da
pensare: ultimamente mi è capitato di leggere commenti molto negativi sul modello DataSet/DataAdapter di ADO.NET, quasi che un bel Domain Model rappresenti la panacea di tutti i mali.
Il mio punto di vista, a questo proposito, è che la distinzione tra bene
e male (o tra Black and White, passatemi questa... è per celebrare il successo del nostro Francesco )
non sia sempre così netta. Chi ha letto Patterns of
Enterprise Application Architecture sa bene che è lo stesso Martin Fowler a sconsigliare il Domain Model in favore di
altri approcci (ad es. il Table Module), nel caso di applicazioni la cui logica di
business non sia complessa e soggetta a una grossa variabilità nel tempo.
Quali possono essere i punti di forza di un DataSet
rispetto al Domain Model?
- Beh.. intanto il fatto che il Table Module è direttamente mappabile sulla struttura del
DB, mentre un Domain Model richiede quasi sempre un Data Mapper, che non è la cosa più facile del
mondo da realizzare;
- poi perché ci si può avvalere di generatori di codice
che risparmiano parecchio lavoro (usare questi strumenti per un Domain Model,
a mio modo di vedere, è un controsenso allucinante);
- in terzo luogo perché l'integrazione del DataSet
nell'IDE di Visual Studio e la struttura estremamente versatile, permettono di
gestire facilmente anche strutture piuttosto complesse, che coinvolgono
DataRelation e campi calcolati;
- perché il DataSet funziona particolarmente bene con il DataBinding,
implementando diverse funzionalità non banali;
- last but not least, perché con l'accoppiata DataSet/DataAdapter ci
troviamo gratis anche un bel Unit of Work e un Optimistic Offline Lock per gestire opportunamente le
modifiche effettuate in locale.
Secondo me, quindi, si tratta di una scelta da ponderare
con attenzione, valutando caso per caso i pro e i contro di entrambe le
soluzioni. A questo proposito, per chi l'averse perso, segnalo anche un articolo del nostro Dinone
nazionale su MSDN Magazine: risale a quasi un anno fa, ma quando l'ho
letto mi ha fatto riflettere parecchio.
Chiudo con un'ultima considerazione, e cioé dicendo che non è scontato che
Domain Model e DataSet non possano coesistere: sempre su PoEAA (pag. 206)
c'è un interessante esempio di come sia possibile realizzare un Data Mapper
(con tanto di lazy load) basato su DataSet e utilizzarlo per persistere le
business entities.
powered by IMHO 1.3