Ora che è pubblico il mio ultimo sforzo produttivo, posso fare due cose: la prima è il tornare a
bloggare, e la seconda dire due parole con una certa cognizione di causa a
proposito di NHibernate e più estensivamente a proposito degli ORM. L'occasione
mi è data dall'aver lavorato sul sito di XE.NET utilizzando
NHibernate, sul quale è basato cuyahoga che a sua vota è appunto base per il
sito.
Inutile dire che NHibernate è magico. Mappi una classe e ti
dimentichi (quasi) che questa in realtà è persistente su un database, ti
dimentichi persino di che database si tratta e questo, a mio parere, è sia
il suo maggior pregio che il suo peggior difetto.
Il fatto è che a me fa anche piacere non dover scrivere SQL
(che per inciso adoro), però poi ho il timore che il dimenticarmi che sto
lavorando con un database mi porti ad abusarne. Mi spiego meglio: quando scrivo
una stored procedure che elabora qualcosa e restituisce dei risultati
so sempre esattamente quante volte questa verrà chiamata e addirittura posso
decidere di scrivere delle procedure studiate appositamente per evitare troppi
roundtrip. Con nhibernate questa sensazione si perde. Sai che stai prelevando o
scrivendo dati su un database, ma non sai mai esattamente quanto lo stai
impegnando e questo a mio parere è un grave problema che deve essere considerato
attentamente. Lo so, Nhibernate ha i meccanismi di cache per evitare troppe
chiamate al database, ma sapete bene quanto me che la cache per quanto ben
fatta, ha comunque un limite e non può essere considerata panacea di tutti i
mali.
Detto questo comunque la mia sensazione è del tutto positiva.
Credo di dover trovare il mio modo di usare NHibernate, inventandomi qualche
cosa che mi restituisca almeno in parte la padronanza di un mezzo di cui non
vorrei perdere il controllo. Però è assodato che prossimamente i miei progetti
(ne ho uno in cantiere da un po'... ) godranno di questo strumento.
Il mio consiglio quindi è di provarlo perchè se tra i requisiti
di una applicazione c'è (e quando non è così?) anche un tempo di sviluppo
ridotto, allora NHibernate è il vostro migliore amico.