Sunteți pe pagina 1din 5

NHibernate Framework

Conductor tiinific: Saranciuc Dorian


Lica Ion
Universitatea Tehnic a Moldovei

Rezumat: n acest articol se prezint o descriere general despre conceptul de persisten i importan a
NHibernate ca o tehnic de implementare pentru aceasta. Se va discuta despre baze de date rela ionale, cu o
viziune mai aprofundat asupra SQL. Se va prezenta un mecanism de abordare a persisten ei n .NET i va fi
discutat NHibernate ca soluie util. La final se va vorbi despre maparea obiect/rela ional, ca o trecere de la
modelul relaional la cel obiectual.
Cuvinte Cheie: NHibernate, persisten, SQL, entiti, ORM, Asimetrie, CRUD, .NET, interogri.
1. Privire general asupra Persistenei
Persisten este o preocupare fundamental n dezvoltarea de aplica ii. Aproape toate aplica iile necesit
date persistente. Utilizai persistena pentru a permite ca datele s fie stocate chiar i atunci cnd programele pe
care le folosesc nu ruleaz.
Pentru a ilustra, s presupunem c dori i s crea i o aplica ie care permite utilizatorilor s stocheze
numerele de telefon ale companiilor lor i datele de contact ale acestora i s le prelua i aceste date oricnd este
necesar. Cu excepia cazului n care dori i ca utilizatorul s prseasc programul de func ionare tot timpul, v
vei da seama curnd c aplicaia are nevoie pentru a salva ntr-un fel contactele undeva. Te vei confruntat cu o
decizie de persisten: ai nevoie de a te decide cu care mecanism de persisten a dore ti s l utilizezi. Ave i
posibilitatea de a stoca datele dvs. n multe locuri, cea mai simpl metod fiind un fi ier text. Cel mai adesea,
putei alege o baz de date relaional, deoarece astfel de baze de date sunt n elese pe scar larg i ofer
caracteristici extraordinare pentru stocarea i regsirea datelor n mod fiabil.
Persistena obiectelor semnific c unele obiecte pot avea ciclu de via mai mare dect procesul
aplicaiei care le-a creat. Acestea pot fi salvate i recreate mai apoi pentru utilizarea ulterioar.
2. Baza de date relaionale
Probabil c ai lucrat deja cu o baz de date rela ional, cum ar fi Microsoft SQL Server, MySQL sau
Oracle. Majoritatea dezvoltatorilor folosesc baze de date rela ionale n fiecare zi; ele au o larg acceptare i sunt
considerate soluie robust i matur la provocrile moderne de gestionare a datelor.
Un sistem de management al bazelor de date relaionale (RDBMS) nu este specific .NET, i o baz de
date relaional nu este neaprat specific unei singure aplica ii. Pute i avea mai multe aplica iile care acceseaz
o singur baz de date, unele scrise n .net, unele scrise n Java sau Ruby, i a a mai departe. Tehnologia
relaionala ofer o modalitate de partajare a datelor ntre multe aplica ii diferite.
Tehnologia relaionala este un numitor comun al multor sisteme i platforme tehnologice care sunt fr
legtur. Modelul de date relaionale este adesea comun la nivel de ntreprindere pentru reprezentarea
obiectelor de afaceri: o afacere are nevoie pentru a stoca informa ii despre diverse lucruri cum ar fi: clien i,
conturi i produse (obiectele de afaceri), i bazele de date rela ionale sunt, de obicei, locul central unde acestea
sunt definite i stocate.
3. Viziune asupra SQL
Orice tip de dezvoltare a bazelor de date n .NET, necesit o n elegere solid a bazelor de date
relaionale i SQL care sunt o condiie esenial atunci cnd utiliza i NHibernate. Vei folosi SQL pentru a regla

performana din aplicaia NHibernate. NHibernate automatizeaz multe sarcini codificare repetitive, dar
cunotinele asupra tehnologie de persisten trebuie s se extind dincolo de NHibernate dac dori i s profita i
de ntreaga putere a bazelor de date moderne SQL. Aminti i-v c obiectivul de baz este o gestionare solid,
eficient a datelor persistente.
4. Persistena n aplicaiile obiect-orientate
ntr-o aplicaie orientat spre obiect, persistena permite unui obiect s dureze mai mult dect procesul
sau aplicaia care l-a creat. Starea obiectului poate fi stocat pe disc i un obiect, cu aceea i stare de recreat la un
moment dat n viitor.
Bazele de date relaionale moderne ofer o reprezentare structurat a datelor persistente, care s permit
sortarea, cutarea i gruparea de date. Sistemele de management al bazelor de date sunt responsabile pentru
gestionarea lucrurilor cum ar fi integritatea datelor i concuren a; acestea sunt responsabile pentru schimbul de
date ntre mai muli utilizatori i aplicaii multiple. Un sisteme de management a bazelor de date ofer, de
asemenea, un nivel de securitate a datelor. Cnd discutm persisten a ne gndim toate aceste lucruri:
Stocare, organizare i regsire a datelor structurate
Simultaneitatea i integritatea datelor
Distribuirea datelor
n special, ne gndim la aceste probleme, n contextul unei cereri orientate spre obiecte care utilizeaz
un model de domeniu. O aplicaie cu un model de domeniu nu func ioneaz n mod direct cu reprezentarea
tabelar a entitilor business (folosind Datasets); aplica ia are propriul model, obiect-orientat al entit ilor
business.
4.1 Persistena i arhitectura pe nivele
O arhitectur pe nivele mparte un sistem n mai multe
grupuri, n care fiecare grup conine cod care abordeaz o anumit
zon de problem. Aceste grupuri sunt numite nivele. Un
beneficiu major al abordrii pe nivele este c putei face de multe
ori modificri la un singur strat, fr o perturbare semnificativ a
celorlalte straturi, fcnd astfel sisteme mai pu in fragile i mai
mentenabile.
Nivelul de Persisten Stratul de persisten este un grup
de clase i componente responsabile pentru salvarea datelor
aplicaiilor i preluarea din unul sau mai multe baze de date. Acest
strat definete o mapare ntre entitile domeniului de afaceri i
baza de date. Astfel Nhibernate va fi folosit n primul rnd n
acest strat.
4.2 Abordri ale persistenei n .NET
Am discutat despre modul n care, n orice aplica ie considerabil, ave i nevoie de un strat de persisten
s se ocupe de ncrcarea i de salvarea datelor. Multe abordri sunt disponibile atunci cnd are loc construirea
acestui strat de persisten, i fiecare are avantaje i dezavantaje. Unele alegeri populare sunt dup cum urmeaz:
Codificare de mn (Hand Coding)
Datasets
LINQ-la-SQL
NHibernate (sau similar)

ADO.NET Entity Framework


n ciuda faptului c am recomanda NHibernate, este ntotdeauna n elept s se ia n considerare
alternativele. Pe msur ce vei afla n curnd, construirea de aplica ii cu Nhibernate este simpl, dar asta nu
nseamn c e perfect pentru fiecare proiect. Vom examina i compara aceste strategii n detaliu, discutarea
implicaiilor pentru accesul bazelor de date i interfa a cu utilizatorul.
5. De ce avem nevoie de NHibernate
In lumea real, rareori se fac aplica ii simple. O aplica ie pentru o ntreprindere are multe entit i cu
obiective, logica de afaceri si design complex: productivitatea, mentenan a, i performan a sunt toate esen iale.
n aceast seciune, vom trece prin unele caracteristici indispensabile pentru implementarea unei
aplicaii de succes. n primul rnd, vom da cteva exemple care ilustreaz diferen ele fundamentale dintre
obiecte i baze de date relaionale. Vei afla, de asemenea, modul n care Nhibernate ajut la crearea unei pun i
ntre aceste reprezentri. Apoi, ne ntoarcem la stratul de persisten pentru a descoperi modul n care se ocup
Nhibernate cu entiti complexe i numeroase. Vei nva modelele i caracteristicile ofer pentru a ob ine cele
mai bune performane. n cele din urm, vom acoperi interogri complexe; ve i vedea c pute i utiliza
Nhibernate pentru a scrie un puternic motor de cutare.
6. Unit of Work and Conversation
Atunci cnd utilizatorii lucreaz la aplicaii, acestea efectueaz opera ii unitare distincte. Aceste
operaiuni pot fi denumite conversaii sau tranzacii comerciale. De exemplu, plasarea unei oferte pe un element
este o tranzacie. Programatorii cu experien tiu ct de greu poate fi a v asigura c multe opera ii conexe
efectuate de ctre utilizator sunt tratate ca i cum ar fi o singur tranzac ie de afaceri mai mare (o unitate).
7. The Unit of Work Pattern
Atunci cnd lucrai cu o baz de date relaional, s-ar putea s tinzi s te gnde ti la comenzi: de
economisire sau de ncrcare. Dar, o aplica ie poate efectua opera iuni care implic mai multe entit i. Cnd
aceste entiti sunt ncrcate sau salvate depinde de context.
NHibernate folosete Identity Map pattern pentru a v asigura c un element de utilizator este acela i
obiect, pe care utilizatorul l-a avut nainte de a ncrca elementul (atta timp ct lucra i n aceea i tranzac ie).
Acum, imaginai-v c suntei implicat ntr-o conversa ie complex care implic multe actualizri i
tergeri. n cazul n care trebuie s urmri i manual care entit i trebuie salvate sau terse, n timp ce v asigura i
c ncrcai fiecare entitate doar o singur dat, lucrurile pot deveni rapid foarte dificil.
NHibernate urmeaz Unit of Work pattern pentru a rezolva aceast problem i faciliteaz punerea n
aplicare a convorbirilor. Avei posibilitatea s crea i entiti i s le asocia i cu NHibernate; apoi, NHibernate ine
evidena tuturor, ncrcnd i salvnd modificrilor numai atunci cnd este necesar. La finalul tranzac iei,
NHibernate aplic toate modificrile n ordinea lor corect.
8. Transparent Persistence and Lazy Loading
Pentru c NHibernate ine evidena tuturor entitilor, se poate simplifica foarte mult aplica ia
dumneavoastr i crete performana aplicaiei. Aici sunt dou exemple simple.
Atunci cnd se lucreaz pe un element n cererea de licita ie, utilizatorii pot aduga, modifica sau terge
ofertele lor. Ar fi dureros s urmrii manual aceste schimbri, unul cte unul. n schimb, pute i utiliza
caracteristica transparent persistence a lui Nhibernate: rogi Nhibernate s salveze toate modificrile n colec ia
ofertelor atunci cnd elementul este persistat. El automat detecteaz care opera iune CRUD trebuie s fie
executate.
Acum, dac dorii s modificai un utilizator, ncrcai, modifica i i l salva i. Dar, cum facem cu colec ia de
elemente ale acestui utilizator ? Ar trebui s ncrca i aceste elemente sau s lsa i colec ia ne-ini ializat?
ncrcarea elementelor ar fi ineficient, dar lsnd colec ia neini ializat va limita posibilitatea de a manipula
utilizatorul.
NHibernate suporta o caracteristic numit lazy loading pentru a rezolva aceast problem. Atunci cnd are
loc ncrcarea utilizatorul, putei decide dac s ncrca i articolelor sau nu. Dac alege i s nu s fac acest
lucru, colecia este iniializat n mod transparent atunci cnd ave i nevoie de ea.
9. Maparea Obiect - Relaional

Timpul a dovedit c bazele de date rela ionale furnizeaz un bun mijloc de stocare a datelor, i c
programarea orientat pe obiecte este o bun abordare pentru construirea de aplica ii complexe. Cu
cartografierea obiect/relaional, este posibil s se creeze un strat de traducere care s poate transforma cu
uurin obiecte n date relaionale i napoi din nou.
Pe scurt, ORM este automatizarea (i, eventual, transparent) persisten ei obiectelor ntr-o aplica ie la
tabele dintr-o baz de date relaional, folosind meta date care descriu cartografierea ntre obiecte i baza de
date. ORM, n esen, lucreaz prin transformarea unor date de la o reprezentare la alta.
10. De ce anume ORM?
Timpul a dovedit c bazele de date rela ionale furnizeaz un bun mijloc de stocare a datelor, i c
programarea orientat pe obiecte este o bun abordare pentru construirea de aplica ii complexe. Cu
cartografierea obiect/relaional, este posibil s se creeze un strat de traducere care s poate transforma cu
uurin obiecte n date relaionale i napoi din nou. Cum acest pod va manipula obiecte, el poate oferi multe
dintre caracteristicile de care avem nevoie (cum ar fi punerea n cache, tranzac ie i controlul concuren ei). Tot
ce trebuie s facem este de a oferi informa ii cu privire la modul de a mapa obiectelor la tabele.
Pe scurt, cartografierea obiect/relaional este automatizarea ( i, eventual, transparent) persisten ei
obiectelor ntr-o aplicaie la tabele dintr-o baz de date rela ional, folosind meta date care descriu cartografierea
ntre obiecte i baza de date. ORM, n esen, lucreaz prin transformarea unor date de la o reprezentare la alta.
10.1 Probleme rezolvate de ORM
Asimetria n modelare
Unul dintre costurile majore este n domeniul modelrii. Modelele rela ionale i obiectuale trebuie s
cuprind aceleai entiti de afaceri. Dar, un programist orientat pe obiecte va modela aceste entit i n mod
diferit dect un modelator experimentat de date rela ionale. Solu ia este obi nuit constnd din aplecarea i
rsucirea modelul de obiect pn cnd se potrive te cu tehnologia rela ional care st la baz.
Acest lucru se poate face cu succes, dar numai cu costul de a pierde o parte din avantajele obiect
orientate. inei minte c modelarea relaional este susinut de teoria rela ional. Orientarea obiectual nu are
o astfel de definiie matematic riguroas sau un corp de lucrri teoretice.
Productivitatea i mentenana
Asimetria din domeniul de modelare nu este singura problem rezolvat de ctre ORM. Un instrument
ca NHibernate te face mai productiv. Se elimina o mare parte din munca groh (mai mult dect te-ai a tepta) i v
permite s te concentrezi pe probleme de afaceri. Indiferent de strategia de dezvoltare a aplica iei prefera i-susjos, pornind de la un model de domeniu; sau de jos n sus, pornind de la o schem a unei baz de date existent NHibernate utilizat mpreun cu instrumentele adecvate va reduce semnificativ timpul de dezvoltare.Asimetria
din domeniul de modelare nu este singura problem rezolvat de ctre ORM. Un instrument ca NHibernate te
face mai productiv. Se elimina o mare parte din munca groh (mai mult dect te-ai a tepta) i v permite s te
concentrezi pe probleme de afaceri. Indiferent de strategia de dezvoltare a aplica iei prefera i-sus-jos, pornind de
la un model de domeniu; sau de jos n sus, pornind de la o schem a unei baz de date existent - NHibernate
utilizat mpreun cu instrumentele adecvate va reduce semnificativ timpul de dezvoltare.
Performana
O afirmaie comun este c persistena scris n hand-code poate fi ntotdeauna cel pu in la fel de rapid,
i de multe ori mai rapid, dect persistena automat. Acest lucru este valabil i n acela i sens c este adevrat
c codul de asamblare poate fi ntotdeauna cel pu in la fel de rapid ca i codul n .Net, cu alte cuvinte este pe
lng punctul dat rapiditatea.
Independena bazelor de date
NHibernate abstractizeaz aplicaia dumneavoastr departe de baza de date SQL i dialectul acestuia.
Faptul c susine o serie de baze de date diferite confer un nivel de portabilitate a aplica ie.
Nu ar trebui s vizezi n mod necesar s scrii aplica ii complet independente fa de bazele de date,
deoarece capacitile bazelor de date sunt diferite i obinerea de portabilitate complet s-ar realiza prin
sacrificarea la o parte din puterea unor platforme mai puternice. Dar, un ORM poate contribui la atenuarea unora
dintre riscurile asociate cu furnizorul de blocare. In plus, independenta de baze de date ajut n scenarii de
dezvoltare pe care utilizai o baz de date local u oar, dar o disloca i pentru produc ie pe o platform de baze
de date diferite.

Concluzie
n aceast am vorbit despre conceptul de persisten i importan a NHibernate ca o tehnic de
implementare pentru acesta. Persistena obiectelor semnific c unele obiecte pot avea ciclu de via mai mare
dect procesul aplicaiei care le-a creat. Acestea pot fi salvate i recreate mai apoi pentru utilizarea ulterioar.
Am vorbit despre arhitectura pe nivele care ajut la implementarea persisten ei.
S-a fcut cunotin cu multe caracteristici ca vor fi greu de scris prin hand-code. De asemenea s-a
discutat despre cum NHibernate rezolv discrepana dintre modelul obiectul i rela ional. Aceasta apare cnd n
joc apar SGBD bazate pe SQL. n prima instan un graf mare de obiecte nu poate fi salvat ntr-o tabel a bazei
de date. Acestea trebuie dezasamblate i salvate n coloanele tabelei SQL.
n sfrit s-a studiat conceptul de ORM. S-a discutat ce avantaje prezint abordarea dat. ORM are ca
scop uurarea lucrului ce cade asupra programatorului, spre exemplu scrierea de scripturi sau jonc iuni asupra
tabelelor. Astfel ORM i NHibernate ofer o portabilitate a bazelor de date, anumite tehnici de optimizare, cum
ar fi cache.
ORM este cea mai buna soluie disponibil la momentul de astzi i este un colac de salvare pentru
programatorii care se ntlnesc cu asimetria obiect/ rela ional. NHibernate este un instrument fantastic al ORMului care permite combinarea beneficiilor ambelor concepte, cel obiectual i rela ional n acela i timp.

Bibliography
1. NHibernate Community 2015. Home. http://nhibernate.info/. [Online] [Cited: May
13, 2016.] http://nhibernate.info/.
2. Schenker, Gabriel. Your first NHibernate based application. http://www.nhforge.org.
[Online] [Cited: May 14, 2016.] http://www.nhforge.org/wikis/howtonh/your-firstnhibernate-based-application.aspx.
3. Pierra Henri Kuate, Tobin Harris, Christian Bauer, Gavin King. NHibernate in
Action. s.l. : Manning Publications Co., 2009. ISBN 978-1-932394-92-4.
4. Kazembe, Rodrick. NHibernate Tutorial C#. http://www.kode-blog.com. [Online]
[Cited: May 14, 2016.] http://www.kode-blog.com/2014/01/nhibernate-tutorial-csharp/.

S-ar putea să vă placă și