0

Plaanin skriptipõhisena perlis kirjutatut üle viia millelegi paremini hallatavale. Esialgu on plaanis kasutada raamistikuna Catalysti, aga see pole praegu tähtis. Nimelt on praegune andmebaasi struktuur piisavalt keeruline, et otsin võimalust, kuidas olemasolev baas kantida ORM-kujule (DBIx::Class). Et ei peaks hakkama mudelit otsast peale kirjeldama, vaid saaks suurema ja mustema töö automaagiliselt ette valmistatud. Millised võimalused selleks on?

Alaküsimus 1: suhteliselt pealiskaudsel tutvumisel ei ole ma veel pihta saanud, kas ja kuidas näiteks DBIx::Class üldse võimaldab mudelisse ühendada mitut eraldi andmebaasi?

Alaküsimus 2: ORM tundub ühest otsast ju tore vahekiht olevat, aga esialgu jääb mulle mulje, et ORM tekitab hulgaliselt liiasust ja nõuab masinalt enam ressurssi. Kas MVC mustrit järgivas raamistikus on mudeli rollis ORMile ka arvestatavat alternatiivi, sest mingi abstraktsioon on ilmselt vajalik? Või on ORMis lahendatud mudel parema optimeerituse arvelt võrreldava ressursinõudlusega?

flag

3 Answers

1

Perli kohta midagi öelda ei oska aga küsimuse 2 kohta natuke vaidlen vastu.

MVC-d tehes võid ju teha ise enda mudeli objektid ise teha, ilma ORM kasutamata - kõik andmete laadimise ja salvestamise ja päringute tegemised jne. Kole tüütu on ainult see. ORM on selleks, et ise ei peaks kirjutama seda sql päringut mis sinu objekt.save() peale käima lastakse ja andmed baasi kirjutab ja need objekt.find() sees sisse loeb.

ORMi kasutamise poolt on ka see, et kui tegemist suurema kasutajaskonnaga ORMiga siis selles on tõenäoliselt vähem vigu, kui sinu enda poolt kirjutatud mudelite andmebaasiga suhtlemise koodis :) Ning ei usu, et selle kasutamine eriliselt aeglasemaks su rakendust teeks, kui see ORM just kuidagi eriti lollilt tehtud ei ole.

link|flag
Otsisin ise veel materjale ORMiga seoses, pisut kriitilisi linke: database-programmer.blogspot.com/2008/06/… ifdefined.com/blog/post/2008/11/… – WK Apr 7 at 23:29
1

Kirjutad 10 rida perli mis sinu tabelid/veereud üle loeb ja nendest package genereerib. Primaarvõtmed saad loodetavasti tuvastada viisaka nimekonventsiooni põhjal. Välisvõtmed soovitan käsitsi defineerida.

alam1: pole proovinud ja manual ei näita et peaks. ei kujuta ette kuidas see võimalik peaks olema - eri ühenduste taga olevate baaside vahel tabeleid joinida niikuinii ei saaks - aga keegi ei keela sul neid samaaegselt kasutada...

alam2: efektiivsuse pärast pole enamasti vaja muretseda kui rakendus tegeleb üksikobjekti kaupa manipuleerimisega. Probleeme võib tekkida paljusid kirjeid hõlmavate päringutega mida loll ORM võib püüda korraga mällu lugeda (ja küsida veel igaks juhuks seotud välju ja objekte lisaks juurde). Seega oleks tungivalt soovitav läbi analüüsida see SQL mida ORM sulle genereerib ja mõelda kuida see skaleerub.

Teine suurem jama tekib siis andmebaasile tugevalt constrainte peale laduda - juhul sa lased süsteemil automaatselt enda eest transkatsioone majandada võivad tulemused olla suht ettearvamatud.

link|flag
10 rida Perli on võimalik kirjutada, lootsin ratta leiutamisest pääseda, aga pole paremat lahendust leidnud. a1: baasid on ühe ühenduse taga ja joinimine on oluline, vastasel korral võiks mudeleid ka mitu olla. a2: tegelikult on see minu arvates laiem küsimus ja peaks äkki eraldi püstitama? Et ORM sellisel kujul on MVC mustri korral praktiliselt ainus arendustee, ei tundu väga jätkusuutlik... – WK Apr 14 at 19:20
1

Väga palju oleneb ka sellest, millise iseloomuga andmebaasitoimingud on. Kui tegemist on lihtsate CRUD tüüpi päringutega, mille eesmärgiks objekte/andmestruktuure salvestada, küsida siis on ORM väga abiks. Kui põhirõhk on keerukamatel päringutel, siis ei pruugi ORM-i kasutegur kuigi suur olla. Võib isegi juhtuda, et ORM jääb oma DSL-i ja konventsioonidega pigem jalgu. Esimese asjana oleks minu arust mõistlik pigem rakendusloogika refaktoreerida. Seda siis selliselt, et kogu andmebaasisuhtlus saab mudeli loogikast välja filtreeritud. Seda eraldiseisvat andmebaasisuhtluse kihti on hiljem parem hallata ja vajadusel ka näiteks mingi ORM raamistikuga asendada.

link|flag

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.