14. februar 2006

Cayenne

Vsi vemo, da je zadan problem rešljiv na veliko načinov. Ena izmed možnih poti pri izdelavi dinamične spletne aplikacije je tudi uporaba ORM (Object Relational Mapping) ogrodij. To je programska tehnika, ki podatkovno bazo predstavi kot objektno strukturo.

Zakaj bi si sploh želeli imeti podateke zapisane v bazi v aplikaciji predstavljene kot graf objektov? Odgovor je zelo podoben tistemu, zaradi katerega je veliko programerjev opustilo proceduralne programerske tehnike in jezike ter osvojilo koncepte objektnega programiranja. Ljudje lažje razmišljamo o objektih, njihovih lastnostih in povezavami med njimi, kot pa o tabelah in vrsticah podatkovne baze (po lastnih izkušnjah velikokrat nenormaliziranih).

Uporaba relacijske baze za shranjevanje objektno orientiranih podatkov vodi v semantični prepad - programerji moramo(jo) programsko rešitev snovati tako, da mešajo dva pristopa. S podatki operiramo na objekten način, shranjujemo pa jih relacijsko. Združevanje tehnik na tak način pomeni zadajanje omejitev enega na drugega in obratno. Prihaja do tako imenovane impedančne nezdružljivosti. SQL podatkovne baze so sestavljene iz niza tabel, ki vsebujejo elementarne podatke. Posamezen zapis v taki bazi se običajno razteza čez več tabel, ki jih moramo za aplikativne potrebe pred tem združiti. S tem hočem povedati, da moramo pri pisanju poizvedbe navesti tudi relacije med njimi.

Uporaba SQL stavkov bo vedno hitrejša rešitev, ob predpostavki da je to v celotnem kontekstu problema najbolj kritičen člen. ORM rešitve podatke na veliko shranjujejo v medpomnilniku, kar je resnično velikega pomena za visoko zmogljiv sistem.

To je bilo nekaj malega v splošnem, zdaj pa še o Cayenne. Ogrodje se zgleduje po EOF (Enterprise Objects Framework), ki velja za enega izmed najboljših. Tabele in vrstice so v pomnilniku predstavljeni kot graf objektov. Nad tem grafom objektov izvajamo čisto običajne operacije kot bi delali z javanskimi zrni. Cayenne spremlja kaj počnemo s posameznimi objekti in relacijami med njimi in ko je čas za zapis v bazo, ogrodje samo izgradi optimizirane SQL stavke. Podatkovne baze različnih proizvajalcev lahko združimo v enoten podatkovni vir do katerega dostopamo prek enega vmesnika. To pomeni, da imamo lahko več dislociranih podatkovnih baz, ki v navezavi z naprednim (Cross-VM Cache Sharing) mehanizmom omogoča skalabilne aplikacije.

Običajno najprej popišemo problem, ki ga želimo aplikativno rešiti. V tem procesu spoznamo naravo podatkov in relacije med njimi. Entitetni model lahko prenesemo v Cayenne Modeler, ki je vizualno modelirno orodje. Z njim lahko tudi preberemo že obstoječo podatkovno shemo in iz nje tvorimo javanske razrede, lahko pa iz modela naredimo shemo - imamo skratka dvosmerno povezano operacijo. S tem orodjem se posredno izdelajo vse konfiguracijske datoteke, ki jih potrebuje naša (spletna) aplikacija. Cayenne je agnostičen na prezentacijski nivo. Java razredi se avtomatsko zgenerirajo "v paru", vedno se naredi še podrazred, v katerega mi dodajamo poslovno logiko. Na ta način lahko Cayenne Modeler ob spremembi (npr. dodan ali spremenjen atribut tabele) prepiše "očeta", ne pa tudi naše dodatne logike. Ne potrebujemo razmišljati, če tega eksplicitno ne želimo, o primarnih ključih, ker to ni v OO (Object Oriented) semantiki. Ker so vsi podatki o preslikavah v posebnih konfiguracijskih datotekah, ki jih izdela prej omenjeni Modeler, je v samih razredih lahko samo čista poslovna logika, kar je lep način ločitve odgovornosti.

Iz svojih izkušenj lahko povem, da je arhitektura aplikacije in koda veliko lepša, če si lahko privoščimo toliko svobode pri načrtovanju.

Ni komentarjev: