Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

DataSet o Domain Model?

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

Print | posted on giovedì 23 marzo 2006 03:02 | Filed Under [ .Net 2.0 Architettura ]

Powered by:
Powered By Subtext Powered By ASP.NET