Riflessioni su NHibernate

Oggi, dopo un lungo periodo in cui mi sono sempre rifiutato di studiare Nhibernate, il crad è riuscito a convicermi. Personalmente non mi è mai piaciuta l'idea di far fare tutto ad un framework senza avere il controllo su molte cose, ma davanti a fatto compiuto devo alzare le mani. :D (qui il crad se la ride).

Piccola premessa per chi non sa cos'è Nhibernate:

Nhibernate è un porting di una libreria Java Hibernate in ambiente .net. Questa libreria ha il compito di agevolare l'utente nella memorizzazione di informazioni in un Database, evitandoci il "problema" di dover scrivere query e "limitando" il nostro compito nello gestire le sole entity. Da queste parole sembra che faccia tutto lui , beh quasi :P.

Detto questo passiamo alla mia esperienza:

Il primo impatto è stato molto brutto, il passaggio da un sistema "classico" è parecchio brusco ma una volta capito come lavora non è difficile da usare (da quel poco che ho potuto vedere).

Se andiamo a pensare quanto possa essere difficile creare un buon DAL (Data Access Layer), quindi "Lazy Load", "Unit of Work", ecc, può venir utile tenere in considerazione Nhibernate.

Premetto che praticamente lo uso solo da un giorno, però ad un primo impatto lo potrei descrivere come molto produttivo.

Gestisce lui lo "Unit of Work", "Lazy Load", e inserimenti o modifiche di entity a cascata; basti pensare ad una entity Fattura che ha al suo interno una Entity cliente, passando a Nhibernate l'entity fattura, lui provedderà automaticamente a inserire la fattura e il cliente nel caso non sia presente nel Database mentre in una situazione normale avremmo dovuto creare 2 query, n parametri, interrogare il nostro DataHelper, ecc, ora tutto questo ci viene fatto con un risparmi di risorse incredibile.

Altra bella caratteristica è quella di poter cambiare tipo di database a runtime modificando una righa nel web.config oppure di dire a Nhibernate, "...guarda sono in un'applicazione asp.net usa la cache" e lui lo fa per noi :P

In termini prestazionali non so ancora quanto possa incidere, ma da quanto mi dicono se usato bene è molto performate.

Con questo post non voglio dire che dobbiamo sempre usare Nhibernate o che sia il metodo migliore, ci sono persone più adatte a rispondere a questo tipo di interrogativo (Ricky o Andrea per citarne due :P ) , ma vale la pena di perderci un attimo tempo perchè può venir utile.

Per chi vuole iniziare consiglio il libro in pdf stampabile e scaricabile qui e un tutorial che mostra come iniziare qui.

Successivamente (appena capisco un po' meglio cosa accade in "background") posto un codice che mostra come iniziare ad utilizzarlo.


Comments