Considerazioni su NHibernate

Questo post di Andrea, mi da lo spunto per alcune riflessioni su NHibernate che da tempo mi affollano la mente, ma che non ho mai scritto per svariati motivi; ero partito con un commento al post ma molto presto mi sono accorto che la lunghezza non era appropriata, e così ecco questo.

Utilizzo NHibernate da circa 6 mesi (abbondanti) su progetti di diversa natura e con differenti DBMS (Oracle, DB2/400 e SQL Server 2005 Everywhere) e dopo una prima fase di 'innamoramento perverso' ultimamente mi sto un po' 'raffreddando', ed il motivo è il seguente : ho avuto la necessità di debuggare mooolto profondamente NHibernate versione 1.2.0 alpha 1, nella versione per framework 2.0, per correggere alcuni bug davvero subdoli e devo dire che sono rimasto perplesso; mi sono imbattuto in porzioni di codice che definirei 'bislacche', alcune parti davvero poco ottimizzate, nonostante la versione sia per FX 2.0 si fa ancora discreto uso di List, ArrayList & Co. (almeno internamente) ed infine c'è una piccola 'epidemia' di side-effects (comunque documentati).

Ma la cosa che più mi ha "spaventato" è  l'impressione che alcuni metodi, ad esempio quelli che dovrebbero 'idratare' i nostri oggetti, vengano eseguiti più volte rispetto al necessario (almeno a mio parere =) ).

Piccolo esempietto
Si supponga di avere un oggetto con chiave multipla mappato alla sua tabella; se devo recuperare un record dal DBMS utilizzo il metodo Get della sessione di NHibernate, passandogli il tipo ed un oggetto con la chiave valorizzata da usare come parametro: supponiamo che la mia classe si chiami Oggetto.

Scrivendo ed eseguendo questo codice

Oggetto parmOggetto = new Oggetto();
parmOggetto.Chiave1 = "X";
parmOggetto.Chiave2 = "Y";
Oggetto retOggetto = sessione.Get(typeof(Oggetto),parmOggetto) As Oggetto;

Ottengo che retOggetto è correttamente istanziato, ma viene "idratato" anche parmOggetto, cosa che secondo me oltre che sbagliata è uno spreco di risorse.

Se a questo aggiungiamo una documentazione pressoché inesistente il quadro si aggrava.

Detto questo io uso e continuerò ad utilizzare NHibernate, che rimane uno strumento utile e potente, ma la domanda che mi pongo incessantemente è : "è davvero questa la strada ?".
Ho dato un'occhiata a LINQ ma ancora non mi convinco, diciamo che spero che i prossimi rilasci siano più chiari, nel frattempo penso e ripenso e mi chiedo se non ci sia un altro modo per gestire la persistenza...mah!

Se mi venisse un lampo, faccio un fischio ;-)

Tags:

«settembre»
domlunmarmergiovensab
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567