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:

posted @ mercoledì 13 settembre 2006 20:38

Print

Comments on this entry:

# re: Considerazioni su NHibernate

Left by Luca at 18/09/2006 14:16
Gravatar
ciao, nonostante molte ore di debug non sono riuscito a scoprire il problem, ho caricato un modellino di prova con solo gli oggetti necessari, nello zip che trovi qui
http://www.lukesoft.com/testnh.zip c'è una solution di Visual Studio 2005 con tutto ciò che serve.

il problema è che oltre ad idratare anche il parametro, non carica la bag con i dettagli, nonostante nella fase di debug ho visto che viene caricata.

ho anche scritto alla mailing list degli sviluppatori con alcuni dettagli tecnici ma non ho avuto risposta.

# [NHibernate] Usare chiavi composte

Left by Crad's .NET Blog at 20/09/2006 04:09
Gravatar

# [NHibernate] Usare chiavi composte

Left by Crad's .NET Blog at 20/09/2006 12:51
Gravatar
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011