Friday, February 23, 2007

Object/Relational mapping tools

Object Relational Mapping tools - įrankiai, susiejantys reliacines duomenų bazes ir objektus. Nesu guru šioje srityje, bet kiek žiūrėjau, yra keli variantai:

* Naudoti kokį nors savo rašytą O/R mapping įrankį
* Naudoti kitų parašytą.

Pirmuoju variantu viskas paprasta - jūs miręs, jei norite savo rašyti, nebent norite pralenkti jau esamus produktus. Sėkmės tokiu atveju!

Antruoju - galima išsirinkti begalę variantų iš čia: http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software

Pats esu susipažinęs su keliais variantais:
- Neo - http://neo.codehaus.org/
- NHibernate - http://www.hibernate.org/343.html
- Castle.ActiveRecord - http://www.castleproject.org/activerecord/index.html


Neo yra neblogas variantas tuom, kad
* lengvai išmokstamas,
* saugomus objektus apibūdini XML aprašu, kuris nėra sudėtingas,
* galima rašyti "enterprise distributed systems".
* Be to, sėkmingai naudojome kuriant paprastą desktop aplikaciją.

Neo minusai:
* objektus galima traukti tik tik per paprasčiausias užklausas. Jokių grupavimų ar agregavimų
* Jokių tiesioginių SQL vykdymo galimybių,
* duomenų bazių palaikymas nedidelis (FireBird, MSSql, MySql, ir kitos).

Asmeninė nuomonė - labai šaunus variantas pradiniam susipažinimui su O/R įrankiais




NHibernate yra monstras, trumpai tariant. Sunku sugalvoti kokių galimybių jums reikia, kurių jis netūrėtų.

* Kešavimas pirmo lygio
* Kešavimas antro lygio
* Lanksti užklausų kalba įskaitant agregavimo ir grupavimo funkcijas
* Tiesioginių SQL sakinių ar procedūrų vykdymas.
* Naujų objektų kūrimas grąžinant užklausą
t.y. tarkime jūs turite Mokinius ir turie Supermenus. Galima rašyti tokią užklausą: select new SuperMokiniai (Mokiniai.Name, Mokiniai.SuperAbility) from Mokiniai, Supermenai where ....
* Duomenų bazių palaikymas didelis.
* Galimybė turėti "composite" pirminius raktus, t.y. pirminį raktą gali sudaryti keli atributai.
* Galimybė gauti objektų savybes, o ne pačius objektus.
* Didelė bendruomenė
ir taip toliau. Turbūt praleidau dar pusę jo savybių.

Minusai:
* NHibernate yra monstras
* Sunku išmokti
* Objektus reikia parašyti xml'u, kuris yra labai komplikuotas ir painus

Pastaba. NHibernate yra .net'inis Hibernate klonas.



Castle.ActiveRecord yra trečias, ir, žinoma, geriausias variantas.
Catsle.ActiveRecord yra ActiveRecord projektavimo principo įgyvendimas .net'inėje aplinkoje naudojant NHibernate kaip pagrindą.

Pliusai:
* Paprasta išmoki
* Galimybės tokios pačios, kaip NHibernate
* Nereikia rašyti XML'ų
* Auganti bendruomenė

Minusai
* Jei reikia tikrai įmantrių galimybių, geriau dirbkite su NHibernate, bet jei reikia greičio, naudokite Castle.ActiveRecord

No comments: