utorak, 23 aprila, 2024
Slobodni profesionalac

Hibernate ORM (2. deo)

Autor: Dejan Čugalj

Object relation mapping (ORM)

ORM (eng. Object Relation Mapping) je način postizanja trajnosti (eng. persistence) objekata unutar relacionih baza podataka. Model deluje kao posrednik na logičkom delu aplikacije. Automatski preslikava podatke iz objekata u bazu i nazad, na zahtev aplikacije. Da bismo objasnili kako ovo sve radi, moramo da vam predstavimo ORM frejmvork (eng. framework) programa otvorenog koda – Hajbernejt (eng. Hibernatehttp://hibernate.org/orm/).

Šta je ORM?

Ukratko, ORM je automatizovano, transparentno preslikavanje objekata korišćenjem metapodataka koji opisuju mapiranje veze između objekta i baze podataka u aplikacijama koje su napisane u objektno orijentisanim programskim jezicima. Aplikacija komunicira sa ORM-om preko njegovog vlastitog API-ja (eng. application programming interface) i određenih objekata. Ova komunikacija je potpuno odvojena od komunikacije koja se odvija između ORM-a i baze podataka preko SQL-a i DBC-a.

Da bi se postigla i dostigla potpuna snaga ORM-a u aplikaciji koju projektujemo, nikako se ne sme isključiti znanje relacionih modela, SQL jezika, te poznavanje DBMS-a u kome se radi. ORM nije ništa drugo do srednji sloj između gore pomenutih tehnologija i objektno orijentisanog programiranja, kao što smo to do sada već više puta naglasili.

Implementacija ORM-a

Postoje različiti načini implementacije ORM-a. Mark Fasl (Mark Fussel) je 1997. definisao četiri nivoa:

  1. „Čist” relacioni način
  2. Slabo mapiranje objekata
  3. Umereno mapiranje objekata
  4. Potpuno mapiranje objekata

„Čist” relacioni način

Cela aplikacija, uključujući i korisnički interfejs, dizajnirana je relacionim modelom i SQL relacionim operatorima. Ovakav pristup je odličan za male projekte. Direktan pristup SQL-u omogućava fino podešavanje svakog aspekta upita koji se postavlja bazi podataka. Osnovne mane su portabilnost (prenosivost) i održavanje ovakvih sistema, pogotovo ako se planira korišćenje aplikacije na duži rok. Ovakvi sistemi masovno koriste sačuvane procedure (eng. stored procedures), što znači da je poslovna logika (eng. busines logic) prebačena na samu bazu podataka.

Slabo mapiranje objekata

Entiteti su predstavljeni kao klase i mapiranje se radi eksplicitno ka relacionim tabelama. SQL/JDBC je sakriven od poslovne logike korišćenjem poznatih šablona (patterns).

Umereno mapiranje objekata

Dizajn aplikacija se svodi na objektne modele. SQL se generiše u vreme kompajliranja (eng. build-time) ili u vreme izvršavanja (eng. run-time). Specifikacija upita nad bazama podataka se radi na objektno orijentisanom jeziku. Ovakvi sistemi se koriste u aplikacijama srednjih veličina kod kojih je bitna portabilnost između različitih sistema za upravljanje bazama podataka (DBMS).

Potpuno mapiranje objekata

Podržava sofisticirano objektno modeliranje, nasleđivanje i polimorfizam. Efikasnost dobijanja podataka je na visokom nivou i koriste se metode kao što su lenjo učitavanje (eng. lazy loading) i strategija keširanja (eng. caching). Implementacija je transparentna u aplikacijama. Ovaj nivo je jako teško dostići. Pojedincu su potrebne godine razvoja da postigne ovakvu fleksibilnost pristupa i manipulacija u relacionim bazama podataka. Upravo ovaj nivo se postiže ako se koriste rešenja ORM-a kao što je Hajbernejt.

Zašto ORM?

 

Implementacija ORM rešenja, pogotovo ako se prvi put susrećete sa ovim modelom, može da bude veoma frustrirajuća i malo teža za implementaciju. Kada ovo kažemo, mislimo da programer koji implementira ORM i hoće da isti bude kvalitetno urađen, mora da poseduje predznanje objektno orijentisanog programiranja i naprednih tehnika kao što su nasleđivanje i polimorfizam.

Ovo inicira fundamentalna pitanja:

  • Pa zašto bi iko onda implementirao ovako nešto kompleksno?
  • Vredi li truda upuštati se uopšte u ORM?

Odgovor nije jednostavan. Dosadašnja iskustva u korišćenju ORM-a i njegova popularnost već daju odgovor na postavljeno pitanje. Očigledno je da su benefiti koje donosi ovaj model veći od kompleksnosti njegove implementacije, a to su:

Veća produktivnost

ORM smanjuje količinu koda potrebnog za ostvarivanje trajnosti podataka. Ovo omogućava programeru da vreme koje bi utrošio na ručno mapiranje podataka, utroši na druge delove aplikacije.

Lakše održavanje

Manje linija koda osigurava bolju razumljivost (i možda bolji kvalitet koda) jer naglašava aplikacijsku logiku. ORM takođe ublažava uticaj nastalih promena kao što su promene u bazi, strukturi tabela, itd.

Prenosivost

Većina ORM rešenja podržava sisteme za upravljanje bazama podataka raznih proizvođača. ORM u potpunosti odvaja sloj aplikacije od stvarne SQL komunikacije koja se odvija u pozadini. Time omogućava da se pišu aplikacije koje će moći da se izvršavaju na različitim bazama podataka bez potrebe za dodatnim kodiranjem. Ova komunikacija se odvija sa programskim interfejsima ORM-a nezavisno o DBMS-u sa kojim je u bilo kom momentu povezan. ORM takođe omogućava lakši prelaz sa manjih na veće baze podataka tokom razvoja aplikacije.

* * *

Uvideli smo da trenutno postoje dve paradigme koje se „sudaraju” i koje su podjednako dobre same za sebe. Relaciona paradigma potvrđuje da sve što je izgrađeno na matematičkim osnovama je i trajno, u smislu kvaliteta koje poseduje. U domenu u kom relaciona paradigma egzistira, ona je, ako je to u ovo vreme uopšte moguće tvrditi, nezamenjiva.

Ono što otvara pitanja i daje razlog za sumnju je, koja je krajnja granica upotrebljivosti relacione paradigme, tj. koliki su kapaciteti složenosti zahteva aplikacija sa kojom može da se nosi. Praksa je pokazala da je sasvim moguće „izvesti” složene projekte – ali održavanje, skalabilnost, razumljivost, prenosivost – pitanja su sa kojim se relaciona paradigma teško može izboriti.

Sa druge strane, svoj habitat u informacionim tehnologijama je našla i objektna paradigma. Iako na prvi pogled ova dva modela nemaju ništa zajedničko – što je u neku ruku i istinito gledajući prirodu podataka kojim manipulišu – praksa je pokazala da su usko povezane i skoro da imaju sinaptičku vezu.

Pitanje „kako spojiti te sinapse” dovelo je do žučnih rasprava u uskim naučnim, programersko-administratorskim krugovima. Rodili su se razni modeli, ali jedan je iskočio i polako ulazi u široku primenu – a to je ORM. Svojim suptilnim pristupom problemu nekompatibilnih paradigmi nekako je uspeo da stvori taj nedostajući „električni signal” koji ih je povezao. Ovo je omogućilo da dve strane, koje su svaka za sebe u svom domenu ostavile i ostavljaju duboki trag u informacionim tehnologijama, sarađuju i donesu novi kvalitet.


Korisni linkovi: