Jeigu nors trupučiu susiduriate su internetinių projektų kūrimu, tikrai turėjote nors viena ausimi girdėti apie Ruby on Rails. Situacija tokia, kad vieni programuotojai jais žavisi, kiti nekenčia, treti ignoruoja, tačiau visi kalba ir pradinis Rails buzzas po truputį virsta į rimtą šio frameworko vertinimą. Be to, kad daugėja gerai žinomų projektų, sukurtų su Rails (ko gero žinomiausias - twitter), nemažai frameworkų kitomis kalbos yra tiesiog wannabe Rails. Iš PHP pusės galima pavardinti: Akelos, Biscuit, CakePHP, CodeInteger, PHP on Trax, Sapphire, Symfony project, TaniPHP ir t.t. Kodėl Rails idėjos tokios patrauklios, kad taip intensyviai bandomos (sakyčiau, tik bandomos) perkelti į kitas kalbas?
Viena iš priežasčių - Ruby on Rails padeda sutaupyti laiko (development speed). Kartą manęs grupiokas paklausė “pasakyk, kaip konkrečiai?”. Taigi, pagrindinė Rails magija, sutaupanti laiko detalėms ir padedanti koncentruotis ties sudėtingąja aplikacijos dalimi:
- MVC. Ko gero geriausias būdas organizuoti web aplikacijos kodą. Vieninga struktūra leidžia lengvai pradėti, perimti ir įsilieti į kitus projektus. Paėmus ne savo kodą lengva orientuotis, o pradėjus naują nereikia gaišti laiko skeletui.
- ORM (Object-relational mapping) arba konkrečiai ActiveRecord. Klasės atstovauja lenteles, taigi vietoj SQL sakinių rašymo užtenka apibrėžti asociacijas keliais sakiniais ir pradėti mėgautis objektiniais malonumais:
# Tarkime, turime sarysi straipsniai-komentarai 1:N articles = Article.all # turime visų straipsnių masyvą article.first.comments # turime pirmojo straipsnio komentarus Article.find_by_author('Vidmantas') # find_by_<em>column_name</em> # Asociacija N:N? Vienas malonumas: # Modelyje nurodom: has_and_belongs_to_many :tags # Ir važiuojam: Article.find(id).tags
Tiesa, specifinėse aplikacijose tenka rašyti reikiamus sudėtingus SQL rankomis, nes taip tiesiog efektyviau - vykdome find_by_sql. Neblogas dalykas ir duomenų bazių migracijos, kuriose Ruby kalba aprašoma kaip keičiasi lentelių struktūra ir su Rails pateikiamais įrankiais galima lengvai “vaikščioti” tarp duomenų bazės versijų. Žodžiu, vienas džiaugsmas.
- Helperiai. Pakelkite rankas, kam nedžiūsta rankos, rašant vis tas pačias formas? Vis rūpinantis, kad neteisingo formato duomenys nepraslystų ir vartotojas apie tai gautų žinią? Teisingai suformuoti informaciją? Rails visa tai pasirūpinta.
- Ajax integracija:
# view <% remote_form_for @article do |f| %> # forma... <% end %> # controller if request.xml_http_request? Article.create(params[:article]) end
Kitais žodžiais - pamirškite rūpinimasi Ajax diegimu į savo programas. Kitas pavyzdys.(beje, kviečiant formos metodus Rails automatiškai įterpia apsaugą nuo forgery atakos)
- Pluginai. Mano mėgstama dalis :-) Programuodami su Rails, galite patikėti rūpestį dažniausiai sutinkamiems uždaviniams spręsti įskiepiams. Reikia failų įkėlimo? Vartotojų registracijos? Komentavimo galimybės? CAPTCHA? Permalink generavimo? Trūksta kokios nors galimybės standartiniame Rails? Į visus šiuos klausimus yra atsakymas: įskiepis. Tarkime, norite failų įkėlimo galimybės:
# instaliuojame įskiepį script/plugin install http://svn.techno-weenie.net/projects/plugins/attachment_fu/ # ir pareiškiame apie savo ketinimus modelyje has_attachment :content_type => :image, :resize_to => [50,50], :max_size => 1.megabyte # wuolia, turime pilnai veikiantį failų uploadą su thumbnailų generavimu!
Negana to, dažnai įskiepiai turi pilnus testus, tad galite būti tikri, kad viskas veikia taip, kaip turėtų.
- DRY, KISS ir kt. Svarbus dalykas - ilgalaikėje perspektyvoje nesutaupysite laiko ir nervų, jeigu nesilaikysite pagrindinių Rails kodavimo principų - DRY, KISS, “fat model, thick controller” ir testavimo. Apie šiuos principus puikiai išdėstyta www.inter-sections.net.
- Convention over configuration. Tai itin svarbi lietuviškai neverčiama savybė. Viskas Rails veikia su nuostata, kad viską darote standartiniu keliu, tad nereikia nieko papildomai nurodinėti. Jeigu nenurodote kitaip, controllerio metodo kvietimas naršyklėje reikš, kad reikia ieškoti layouto pavadinimu “application” ir šablono su metodo pavadinimu ir plėtiniu html.erb. Tačiau viską, esant būtinybei, galima nesunkiai keisti, nurodant kaip nestandartiniai turi veikti aplikacija.
- Ir negaliu to nepaminėti - kodo grožis! PHP niekada neaplenks Ruby vien dėl savo C stiliaus makaronų aplink viską, kas tik randama :-) Unikali savybė - blokai - atveria puikias kodo rašymo galimybes, dėl ko, esu įsitikinęs, supratote visą kodą pavyzdžiuose net nemokėdami Ruby!
Be abejo, Rails be pliusų turi ir savų minusų, o aklas bet kurio gero daikto taikymas visose įmanomose situacijose nekvepia geru. Tačiau faktas, kad man Ruby on Rails grąžino džiaugsmo pojūtį į programavimą. Kviečiu ir jus pabandyti - bent jau pasisemti puikių idėjų.


9 nuomonės
Įrašo komentarų RSS Grįžtamasis adresasBlemba, bet juk reikia ROR mokytis, kas === laiko praradimas…
Tai negi taip išeina, kad bet koks tobulėjimas == laiko praradimas?
Tam Vidmantas ir siūlė anksčiau, kad iš karto mokykloje ruby mokintų :)
ar tikrai „…Rails idėjos tokios patrauklios…“ - juk žavi ne rails idėjos, o mvc + orm, kuriuos rails naudoja, be to rails turi paskirtį - rašyti programas agile metodika. taigi iš principo rails tiesiog išpopuliarino (?) mvc programų kūrimo būdą/metodiką. o visa kita - tik technika, nes programavimas - ne vien fizinis kodo rašymas.
—
mifas rulz
MVC, ORM, DRY ir pan. - taip, jie jau buvo anksčiau, tačiau kodėl niekas taip efektyviai nepanaudojo geriausių jų savybių? Tačiau Rails yra ne tik MVC & stuff, dar yra ir kitų punktų, kurie iš esmės sėkmingai buvo panaudoti web developmente kone pirmą (?) kartą. Kitaip tariant Rails yra, kaip pats sakai, metodikų, priemonių ir technikų rinkinys, kurį gali bandyti realizuot ir bet kas kitas, tačiau čia jis išėjo geras ir patrauklus.
kad ror geras dalykas neneigiu, tik norėjau truputį papriešratautį, kad tai nėra _tik_ šio karkaso savybės :)
Dabar jau be abejo nebe, bet sukūrimo momentu dalis savybių buvo tik šio karkaso “sudėtyje” :-)
Kodo grozis yra tiesiogiai proporcingas ji rasancio programuotojo sugebejimai. O Ruby suteikia TIEK galimybiu rasyt koda belenkaip, kad neitin disciplinuotas programeris gali prirasyt tokiu dalyku, kokiu nesapnavo net ir uzkieteje C gerbejai ;-) Rasant bent kiek rimtesnes aplikacijas kolkas RoR trukumai (pvz, deploymentas) akyvaizdziai nusveria privalumus, deja…
SS, bet kodo grožis priklauso ir nuo kalbos suteikiamų galimybių tai padaryti, man pvz C kodas niekada nebus gražus. Arba Java :-) Asmeniškumai, aišku.
O dėl deploymento tai dabartinėje situacijoje nematau problemų. Ką turi galvoje? mod_rails = drop&launch, nebent tai, kad reikalingas bent jau vps, bet jeigu kalbame apie rimtesnes aplikacijas tai ir taip savaime aišku.
Tavo nuomonė: