Eimantas
Lapkritis 18, 2006

RoR MVC ypatumai

Jau rašiau apie architektūrą bei užklausos apdorojimą. Dabar norėčiau paminėti kelis RoR karkaso architektūros ypatumus.

Objektiškai RoR karkasas yra suskirstytas į du didelius paketus:

  • ActionPack;
  • ActiveRecord;


ActionPack

Šis paketas išskaido užklausą į kontrolerį bei vaizdą. “Dviejų žingsnių” procesas yra žinomas kaip veiksmas (”action”), kuris paprastai iškviečia, kokio nors modelio metodą (create/edit/update/delete) ir atvaizduoja kažkokį vaizdą arba nukreipia į kitą puslapį. Šio paketo dvi sudėtinės dalys: ActionController bei ActionView, yra atitinkamai atsakingos už metodo kvietimą bei vaizdų pateikimą.

Kiekvienas RoR karkaso kontroleris yra ApplicationController klasės paveldėtojas. ApplicationController savo ruožtu yra ActionController::Base klasės paveldėtojas (kuris nebėra Rails dalis) ir dažniausiai būna tuščias. Gali kilti klausimas - kodėl tada visi kontroleriai negali būti ActionController::Base paveldėtojai. Paprasta - RoR karkaso kūrėjai numatė, kad programuotojui gali prireikti įvairių metodų (dar vadinamų filtrais), kuriuos reiktų iškviesti kiekvienai užklausai į RoR aplikaciją. Tiesa, tuos filtrus galima nurodyti ir atskirai kiekvienam kontroleriui jo paties faile (tarkim admin_controller.rb), tačiau ApplicationController klasė leidžia turėti visus šiuos filtrus vienoje vietoje tiek kiekvienam kontroleriui, tiek visiems bendrai. RoR aplikacijos failų medyje ApplicationController yra /app/controllers/application.rb faile.

ActionView (antroji ActionPack dalis) tėra paprasta šablonizavimo sistema, kuri naudoja ERb (embeded Ruby) bei HTML kalbas savo komponentams (vaizdams) konstruoti. Jei šablono bylos plėtinys yra .rxml tada šablonui sukonstruoti yra naudojama Builder::XmlMarkup biblioteka. Jokiu būdu nerašykite pačios xml bylos rankomis. Jums nieko nesigaus. Aš tai jau bandžiau )
Jeigu kontrolerio vaizdų kataloge yra vaizdas, tačiau kontroleris neturi vaizdui metodo - RoR karkasas pateiks šį vaizdą. Aišku yra situacijų, kai galima tą patį vaizdą generuoti iš skirtingų metodų (pvz.: prekių sąrašas).

ActiveRecord

Šis paketas atstovauja model daliai iš architektūros. Jis sujungia logiką su duomenų talpyklomis, kas leidžia nesijaudinant dėl duomenų talpinimo technologijų lengvai manipuliuoti duotais duomenimis. Į šį paketą įtraukta daug papildomų funkcijų, kurios gausiai palengvina darbą su duomenų bazėmis:

  • duomenų validacija pagal skirtingus kriterijus:
    • unikalumas - tikrina ar įvedama reikšmė yra unikali visoje lentelėje. Galima patikrinti reikšmės unikalumą tam tikro stulpelio atžvilgiu (pvz.: vartotojų registracijoje);
    • įvedimas - tikrina ar iš viso reikšmė buvo įvesta;
    • formatas - galima pateikti įprastinę išraišką (PCRE), kurią turi atitikti įvedami duomenys (pvz.: el.pašto adreso tikrinimas);
    • ilgis - tikrinama ar įvestų duomenų ilgis atitinka duotą intervalą (arba mažiausią/didžiausią ilgį);
  • duomenų asociacijos tarp skirtingų modelių:
    • 1:n
    • n:m

Be šių dviejų RoR karkaso dalių yra dar kelios, nelabai reikšmingos, be kurių gali funkcionuoti pakankamai normali RoR aplikacija. Apie jas žadu parašyti kituose straipsniuose.

Šiam kartui tiek. Gero skaitymo ir iki kito straipsnio.

Komentarai ir originalus straipsnis: http://blog.rubyonrails.lt/ror-mvc-ypatumai.html

Panašūs straipsniai


Komentarai uždrausti.