петак, 19 априла, 2024
Слободни професионалац

Hibernate ORM (2. део)

Аутор: Дејан Чугаљ

Object relation mapping (ORM)

ORM (енг. Object Relation Mapping) је начин постизања трајности (енг. persistence) објеката унутар релационих база података. Модел делује као посредник на логичком делу апликације. Аутоматски пресликава податке из објеката у базу и назад, на захтев апликације. Да бисмо објаснили како ово све ради, морамо да вам представимо ORM фрејмворк (енг. framework) програма отвореног кода – Хајбернејт (енг. Hibernatehttp://hibernate.org/orm/).

Шта је ORM?

Укратко, ORM је аутоматизовано, транспарентно пресликавање објеката коришћењем метаподатака који описују мапирање везе између објекта и базе података у апликацијама које су написане у објектно оријентисаним програмским језицима. Апликација комуницира са ORM-ом преко његовог властитог API-ја (енг. application programming interface) и одређених објеката. Ова комуникација је потпуно одвојена од комуникације која се одвија између ORM-а и базе података преко SQL-а и DBC-а.

Да би се постигла и достигла потпуна снага ORM-а у апликацији коју пројектујемо, никако се не сме искључити знање релационих модела, SQL језика, те познавање DBMS-а у коме се ради. ORM није ништа друго до средњи слој између горе поменутих технологија и објектно оријентисаног програмирања, као што смо то до сада већ више пута нагласили.

Имплементација ORM-а

Постоје различити начини имплементације ORM-а. Марк Фасл (Mark Fussel) је 1997. дефинисао четири нивоа:

  1. „Чист” релациони начин
  2. Слабо мапирање објеката
  3. Умерено мапирање објеката
  4. Потпуно мапирање објеката

„Чист” релациони начин

Цела апликација, укључујући и кориснички интерфејс, дизајнирана је релационим моделом и SQL релационим операторима. Овакав приступ је одличан за мале пројекте. Директан приступ SQL-у омогућава фино подешавање сваког аспекта упита који се поставља бази података. Основне мане су портабилност (преносивост) и одржавање оваквих система, поготово ако се планира коришћење апликације на дужи рок. Овакви системи масовно користе сачуване процедуре (енг. stored procedures), што значи да је пословна логика (енг. busines logic) пребачена на саму базу података.

Слабо мапирање објеката

Ентитети су представљени као класе и мапирање се ради експлицитно ка релационим табелама. SQL/JDBC је сакривен од пословне логике коришћењем познатих шаблона (patterns).

Умерено мапирање објеката

Дизајн апликација се своди на објектне моделе. SQL се генерише у време компајлирања (енг. build-time) или у време извршавања (енг. run-time). Спецификација упита над базама података се ради на објектно оријентисаном језику. Овакви системи се користе у апликацијама средњих величина код којих је битна портабилност између различитих система за управљање базама података (DBMS).

Потпуно мапирање објеката

Подржава софистицирано објектно моделирање, наслеђивање и полиморфизам. Ефикасност добијања података је на високом нивоу и користе се методе као што су лењо учитавање (енг. lazy loading) и стратегија кеширања (енг. caching). Имплементација је транспарентна у апликацијама. Овај ниво је јако тешко достићи. Појединцу су потребне године развоја да постигне овакву флексибилност приступа и манипулација у релационим базама података. Управо овај ниво се постиже ако се користе решења ORM-а као што је Хајбернејт.

Зашто ORM?

 

Имплементација ORM решења, поготово ако се први пут сусрећете са овим моделом, може да буде веома фрустрирајућа и мало тежа за имплементацију. Када ово кажемо, мислимо да програмер који имплементира ORM и хоће да исти буде квалитетно урађен, мора да поседује предзнање објектно оријентисаног програмирања и напредних техника као што су наслеђивање и полиморфизам.

Ово иницира фундаментална питања:

  • Па зашто би ико онда имплементирао овако нешто комплексно?
  • Вреди ли труда упуштати се уопште у ORM?

Одговор није једноставан. Досадашња искуства у коришћењу ORM-а и његова популарност већ дају одговор на постављено питање. Очигледно је да су бенефити које доноси овај модел већи од комплексности његове имплементације, а тo су:

Већа продуктивност

ORM смањује количину кода потребног за остваривање трајности података. Ово омогућава програмеру да време које би утрошио на ручно мапирање података, утроши на друге делове апликације.

Лакше одржавање

Мање линија кода осигурава бољу разумљивост (и можда бољи квалитет кода) јер наглашава апликацијску логику. ORM такође ублажава утицај насталих промена као што су промене у бази, структури табела, итд.

Преносивост

Већина ORM решења подржава системе за управљање базама података разних произвођача. ORM у потпуности одваја слој апликације од стварне SQL комуникације која се одвија у позадини. Тиме омогућава да се пишу апликације које ће моћи да се извршавају на различитим базама података без потребе за додатним кодирањем. Ова комуникација се одвија са програмским интерфејсима ORM-а независно о DBMS-у са којим је у било ком моменту повезан. ORM такође омогућава лакши прелаз са мањих на веће базе података током развоја апликације.

* * *

Увидели смо да тренутно постоје две парадигме које се „сударају” и које су подједнако добре саме за себе. Релациона парадигма потврђује да све што је изграђено на математичким основама је и трајно, у смислу квалитета које поседује. У домену у ком релациона парадигма егзистира, она је, ако је то у ово време уопште могуће тврдити, незамењива.

Оно што отвара питања и даје разлог за сумњу је, која је крајња граница употребљивости релационе парадигме, тј. колики су капацитети сложености захтева апликација са којом може да се носи. Пракса је показала да је сасвим могуће „извести” сложене пројекте – али одржавање, скалабилност, разумљивост, преносивост – питања су са којим се релациона парадигма тешко може изборити.

Са друге стране, свој хабитат у информационим технологијама је нашла и објектна парадигма. Иако на први поглед ова два модела немају ништа заједничко – што је у неку руку и истинито гледајући природу података којим манипулишу – пракса је показала да су уско повезане и скоро да имају синаптичку везу.

Питање „како спојити те синапсе” довело је до жучних расправа у уским научним, програмерско-администраторским круговима. Родили су се разни модели, али један је искочио и полако улази у широку примену – а то је ORM. Својим суптилним приступом проблему некомпатибилних парадигми некако је успео да створи тај недостајући „електрични сигнал” који их је повезао. Ово је омогућило да две стране, које су свака за себе у свом домену оставиле и остављају дубоки траг у информационим технологијама, сарађују и донесу нови квалитет.


Корисни линкови: