MesBlog

Thinking in sharp architectures
posts - 160, comments - 518, trackbacks - 40

DDD? No... io credo ADD

Ok, cominciamo col dire che non ho alcuna intenzione di coniare una nuova buzzword.

Ormai è un po' di tempo che sto lavorando continuativamente con NHibernate, approcciando lo sviluppo di applicazioni che fortunatamente non hanno uno schema di DB già fatto, quindi con il pieno controllo di quello che l'accesso ai dati persistiti.

Probabilmente questo mio post susciterà qualche reazione in alcuni di coloro che lo leggeranno, ma voglio comunque fare una riflessione.
Orbene, DDD è l'ormai famoso acronimo do Domain Driven Design, ovvero quella pratica di design architetturale che si basa sulla costituzione di un modello di dominio object oriented (e sì, con tutti i bla bla bla di contorno fra cui la postilla importantissima la quale recita più o meno: _NON_ è l'unico modo di progettare un'architettura enterprise, valutare bene i pro ed i contro, eccetera, eccetera, eccetera).

Il modello di dominio in salsa object oriented è un approccio che "teoricamente" dovrebbe fornire tutta la potenza del paradigma OO nel concettualizzare entità e interazioni (per non chiamarle relazioni che magari fa confusione...) fra queste. Quindi classi, associazioni, ereditarietà, incapsulamento, collezioni e via discorrendo.

Bè... falso come Giuda ;-)

No dai, sto esagerando, però siamo a metà strada...

Quello che definisco ADD starebbe per Adaptive Driven Design ovvero qualcosa che faccia pensare all'attività di "adattamento" di qualcosa (che più avanti specificherò) verso qualcos'altro.
Il qualcosa che deve adattarsi è proprio il modello di dominio, o almeno la "mano libera" che abbiamo nel disegnarlo, che tanto libera in realtà non è, almeno utilizzando il framework più famoso in ambito DDD, ossia NHibernate, ma più in generale approcciando la persistenza del dominio stesso su supporto non deperibile (il disco fisso...).

NHibernate è appunto "the bridge over trouble water" (cit.), ovvero quello strato software (non facciamola tanto lunga suvvia) che permette di mappare un modello di dominio OO su uno schema relazionale ospitato in un RDBMS, che volenti o nolenti, oggi come oggi, rimangono il sistema più sicuro ed efficace di "scrivere" e manutenete su disco i dati (e poi non vogliamo mica mandare sul lastrico svariate migliaia di lavoratori, vero?).
Sgombriamo il campo da equivoci: non ce l'ho con NHibernate, ce l'ho con la letteratura dell'ingegneria del software, soprattutto quella che si occupa di DDD.

A mio umile e modetso modo di vedere bisognerebbe dare, a chi si affaccia per la prima volta al mondo del modello di dominio, un messaggio molto chiaro: il mondo delle favole esiste solo a Fantasilandia, nani compresi.

NHibernate, povero diavolo, fa quello che deve fare, e lo fa piuttosto bene, ovvero mappare un grafo di classi su uno schema relazionale, con tutte le sue associazioni, pure bidirezionali, ereditazioni (ma si dirà così?), collezioni, eccetera, eccetera, eccetera. Altrettanto non v'è dubbio che la potenza della Unit of Work e dell'Identity Map, siano ormai irrinunciabili in moltissimi scenari, come le mirabolanti funzionalità di caching che il buon Gavin King ha voluto offrirci (e il primo che mi chiede chi è costui lo sparo...), e potrei continuare.

Ma c'è un ma (ma va?). E cioè che con tutta la perizia, la buona volontà, l'applicazione, il rigore, e chi più ne ha più ne metta, la ormai famigerata "Impedance Mismatch" (ma poi perchè sarebbe femmninile qualcuno me lo dovrà spiegare prima o poi), è davvero dura di comprendonio e in molti casi ci si deve arrendere.

Arrendere significa (a casa mia...) "adattarsi", da qui l'acronicmo ADD. Il che a sua volta significa: scordatevi di disgenare un modello di dominio sbizzarendovi con la object orientation, perchè la maggior parte delle volte vi triverete di fronte ad un costrutto che sarà impossibile (o comunque altamente sconsigliabile, che è la stessa cosa alla fine) mappare su uno schema relazionale, anche se quest'ultimo non ve lo ha imposto nessuno e lo state progettando da zero, esattamente come il modello ad oggetti.

E così ad esempio la delusione (gli ohhhhhh desolati si sprecano) nell'apprendere che sì, NHibernate, in quanto ORM a modino, supporta le relazioni molti-molti, ma per carità del cielo _NON USATELE MAI_, usate sempre due uno-molti con una entità di dominio ponte (ehi, aspetta un attimo... ma è quello che faccio già col modello relazionale!!!! Vero fratello, vai in pace). O per esempio scoprirete vostro malgrado che le entità DettaglioQuaccheccosa si sprecano.

Ovviamente sto esagerando, ma il succo in fondo in fondo è proprio questo: dovrete adattarvi, turarvi il naso ogni tanto, sporcarvi le mani e alla fine con la stampa del modello di dominio nella mano destra, quella dello schema del DB nella sinistra, avrete la netta sensazione di stare osservando due gemelli diversi, eterozigoti, certo non due cugini di secondo grado...

I libri sono tanto belli, io ad esempio avrò un paio di stipendi posizionati nella sezione della mia libreria dedicata al mondo dello sviluppo software, ma non prendeteli come oro colato. Venite ai workshop (di tutte le community, anche quelle fresche ed alternative <g>), ascoltate gli speaker che come noi il codice lo scrivono, quello vero che va in produzione, fate anche qualche corso specifico. Vedrete che la vità, magari non vi sorriderà ancora, ma forse un po' meno incazzata lo sarà di certo.

Saluti.

Print | posted on mercoledì 14 novembre 2007 14.53 |

Feedback

Gravatar

# re: DDD? No... io credo ADD

Penso che un modo di fare assolutistico non premi quasi mai. Ecco perché quando progetto un modello di dominio, cerco di non dimenticare mai quali sono gli strumenti che utilizzerò per persisterlo, per visualizzarlo, ecc.ecc.

Allo stesso modo, non mi faccio problemi ad inserirvi anche della semplice logica, se questo semplifica di molto l'architettura del mio progetto.

Altrimenti rischio di trovarmi in difficoltà anche nelle cose più semplici, di perdere tempo inutilmente e di complicare eccessivamente il design dell'applicazione con il rischio di perdere presto la maniglia.

My two cents :-)
14/11/2007 15.23 | Marco De Sanctis
Gravatar

# re: DDD? No... io credo ADD

>ma forse un po' meno incazzata lo sarà di certo
Splendido! ROTFL
14/11/2007 17.04 | Antonio Santise
Gravatar

# re: DDD? No... io credo ADD

Un developer agile sta nascendo in te ;-).
Concordo pienamente che l'object model perfetto e "puro" è un utopia perchè, oltre al db c'è la UI il codice legacy le librerie esterne, i colleghi, i capo progetto, i clienti, le scadenze ;-) ecc.
A me interessano approcci che funzionino non che siano "belli" e per ora il TDD e scrivere codice in pair (non il 100% del tempo) sono le due cose che funzionano meglio tra tutte quelle che ho provato.
Perchè dico che funzionano? Perchè quando il cliente viene da me e ci chiede dei cambiamenti riusciamo a farli senza far degradare il design esistente e introducendo pochi bug, che una volta scovati si risolvono quasi sempre in poco tempo.
14/11/2007 17.44 | Antonio Ganci
Gravatar

# re: DDD? No... io credo ADD

Quote:
Domain Driven Design, ovvero quella pratica di design architetturale che si basa sulla costituzione di un modello di dominio object oriented (e sì, con tutti i bla bla bla di contorno fra cui la postilla importantissima la quale recita più o meno: _NON_ è l'unico modo di progettare un'architettura enterprise, valutare bene i pro ed i contro, eccetera, eccetera, eccetera).

Occhio Roberto, questa va detta subito:
Non è vero. DDD NON significa quello. Vai a vedere i miei post a riguardo (le pillole). DDD ha come principio fondamentale quello di tenere allineato il codice rispetto al modello analitico, in modo da evitare deviazioni tra i due modelli.
DDD non significa avere un Object Model o un Domain Model.

14/11/2007 17.53 | Giancarlo Sudano
Gravatar

# re: DDD? No... io credo ADD

eh non voglio scatenare nulla, ma io non la penso cosi'. Tu stai dicendo, se ho ben capito, che DDD è ottimo come teoria ma impraticabile come pratica sul campo (che frasona...). Non è cosi'. Almeno per me. Io ero dietro ad un progetto dal quale non ne uscivo proprio perchè la logica era associata a due DAL nettamente diversi che non riuscivo a far comunicare. Adesso che sto acquisendo sempre piu' praticità con DDD devo dire che è stato proprio il dominio il mio toccasana, ovvero quello che mi ha tolto dalla cacca che da solo avevo prodotto. Comunque sempre IMHO.
:-)
15/11/2007 21.08 | raffaeu
Comments have been closed on this topic.

Powered by: