Pirmuose RoR dokumentacijos sakiniuose teigiama, kad šis karkasas yra sukurtas pagal MVC architektūros modelį. Iš tiesų tai yra struktūrinis šablonas (mol. design pattern) pagal kurio architektūrą yra kuriamos paprastos programos, o ne web aplikacijos.
MVC architektūros naudojimas web aplikacijose atsirado seniai (šia architektūra yra paremti keli Apache projektai), tačiau pati “banga” prasidėjo tada, kai O’Reilly apibrėžė terminą “Web 2.0″. Tada, paplitus Ajax technologijų “grupei” (kas nors turite geresnį terminą?), pradėjus taikyti folksonomiją (a la taginti), į interneto puslapį pradėta žiūrėti kaip į aplikaciją. Žinoma, tokioje situacijoje norint suprogramuoti interneto svetainę kaip aplikaciją reikia taikyti paprastų aplikacijų kūrimo “filosofiją”.
MVC veikimas yra paremtas separation of concerns (SoC) principu. Tai reiškia, kad programa yra išskaidoma į tokias dalis, kad jų funkcionalumas/poreikiai nepersidenginėtų. Šis principas yra taikomas daug kur. Vienas iš pavyzdžų būtų [x]HTML ir CSS. [x]HTML kalbos paskirtis yra nurodyti dokumento struktūrą, kai tuo tarpu CSS nurodo, kaip pats dokumentas turėtų atrodyti. Objektiškai orientuotame programavime šis principas atsispindi išskaidant užduočių atlikimą į objektus ir jų metodus. Galiu derėtis, jeigu žinojote OOP paradigmą taip pat žinojote ir apie SoC, tačiau nežinojote kaip tai pavadinti.
Pačiame MVC šis principas pasireiškia logikos, prezentacijos ir turinio atskirymu. Kaip jau ir žinote MVC reiškia Model-View-Controller. Trys dalys atsakingos už savo “veiklos sritį”.
Model - tam tikros srities duomenų valdymo/pateikimo vienetas. Jeigu skamba per sudėtingai, štai paprastesnis apibūdinimas: modelis gali būti atsakingas už mokesčių apskaičiavimą tam tikram pristatymui iš internetinės svetainės, privalo patikrinti ar šiandien yra tam tikro vartotojo gimtadienis, išsiųsti mėnesines naujienas el. paštu prenumeratoriams ir pan.
View - suteikia programos modeliui išvaizdą, tinkamą vartotojui suprasti (formos, sąrašai, etc.). Web aplikacijos tai ne kas kita kaip sugeneruotas HTML/CSS kodas.
Controller - atsako už modelio valdymą bei “vaizdų” pateikimus pagal atitinkamus veiksmus (vartotojo interakciją): mygtuko paspaudimas, teksto įvedimas ir pan.
Pirmoje dalyje tiek. Antroje dalyje pasistengsiu detaliau aprašyti vidinę MVC veikimo schemą ir kaip tai yra įgyvendinta RoR karkase.
Komentarai ir originalus straipsnis: http://blog.rubyonrails.lt/mvc-i-architektura.html
2006-10-23 | 9:56
Įdomu bus palyginti su turbogears
2006-10-27 | 22:39
dado1954: manau tikslingiau butu rails’us lyginti su python’o frameworku django, nes jie atsirado panasiu metu. O turbogears atsirado truputi veliau, todel mano subjektyvia nuomone - turbogears’ai pasieme dali rails’u ir django frameworku “isminties”. Nors velgi tai labai subjektyvu. Gal palyginam Ruby ir Pythona? :)