Blogi MVC for dummies: malli, näkymä ja ohjain -arkkitehtuuri web-sovelluksissa
Ammattilaisten kehittämä sovellus ei ole pelkkä satunnainen kasa koodia, vaan rakentuu valittujen arkkitehtuurimallien ympärille. Arkkitehtuuri auttaa pitämään sovelluksen sisäisen rakenteen loogisena ja helpottaa sovelluksen ylläpidettävyyttä ja jatkokehitettävyyttä.
Model-View-Controller (MVC) on perinteinen ohjelmistokehityksen suunnittelumalli, jonka tärkein tehtävä on eriyttää sovelluksen esitys- ja logiikkakerros toisistaan ja delegoida sovelluksen sisäisiä vastuita eri osa-alueille.
Alkuperäisellä MVC-arkkitehtuurilla on ikää yli 40 vuotta, joten se on vuosien saatossa saanut rinnalleen runsaasti erilaisia muunnelmia ja muita arkkitehtuurimalleja. Useat web-frameworkit (esim. Laravel, Django ja Ruby on Rails) käyttävät joko suoraan MVC-arkkitehtuuria tai jotain sen muunnelmaa. MVC soveltuukin hyvin vaikkapa REST-rajapintojen rakentamiseen.
MVC, tai mikään muukaan sovelluksen sisäinen arkkitehtuuri, ei kuitenkaan suoraan näy sovelluksen loppukäyttäjälle, eikä edes palveluntarjoajalle. Tässä blogitekstissä kerromme tarkemmin siitä, mitä web-sovellusten pinnan alla tapahtuu.
MVC:n ydinperiaate on säilynyt samana vuosien ajan: ohjelmiston rakenne jäsennetään kolmeen osa-alueeseen, eli malliin (Model), näkymään (View) ja ohjaimeen (Controller).
Malli, näkymä ja ohjain toimivat vuorovaikutuksessa keskenään ja ovat usein toisistaan riippuvaisia, vaikka niiden toiminnot suunnitellaan ja toteutetaan jossain määrin erikseen. Eri osa-alueiden välinen riippuvuus tarkoittaa sitä, että esimerkiksi muutos mallissa saattaa tarkoittaa muutoksia myös näkymässä.
Kaaviossa on yksinkertainen MVC, jonka pohjalta on luontevaa suunnitella ja rakentaa järjestelmän toiminnallisuuksia. Kuvassa on ohitettu käyttöliittymäkerroksen omat toiminnot, jotta MVC-arkkitehtuuri voidaan kuvata mahdollisimman yksinkertaisesti.
Sovelluksen ydintoiminto on tiedonhaku: käyttäjä hakee kaikki tallennetut yhteystiedot tietokannasta.
Malli on järjestelmän dynaaminen tietorakenne, joka käsittelee ja varastoi ohjelmiston sisällä liikkuvaa tietoa. Tietoa hallinnoivat mallit ovat usein kytkettyinä ohjelmiston toiminnan kannalta oleelliseen tietovarastoon, kuten relaatiotietokantaan.
Näkymä esittää datan määritetyssä muodossa, joka voi olla esimerkiksi sovelluksen käyttöliittymä (HTML) tai jokin muu datan esitysmuoto (esim. JSON tai XML).
Näkymä-käsitettä käytetään web-kehityksessä sekä back-endin, että front-endin puolella. Perinteisesti näkymät ovat olleet suoraan käyttäjälle esitettäviä HTML-dokumentteja, mutta nykyisin näkymät ovat useimmiten käyttöliittymien käsiteltäväksi tarkoitettua dataa.
Ohjaimen tehtävänä on vastaanottaa komentoja ja toimia komentojen mukaisesti tiedon siirtäjänä mallin ja näkymän välillä. Käytännössä tämä tarkoittaa, että ohjain hakee, kirjoittaa tai poistaa dataa mallin kautta ja lopuksi palauttaa uuden näkymän.
Esimerkiksi web-sovellusten back-endissä ohjaimelle tulevat komennot ovat useimmiten HTTP-pyyntöjä. Kun pyyntö on käsitelty, ohjain palauttaa näkymän HTTP-vastauksena.
Vaikka MVC-arkkitehtuurissa ohjelmiston sisäisten osien vastuualueet erotetaan toisistaan ja voidaan myös rakentaa erikseen, huomioidaan ohjelmistokehityksessä aina mallin, näkymän ja ohjaimen väliset riippuvuudet.
Fiksusti suunnitellun ja rakennetun sovelluksen jatkokehitys on myöhemmin helpompaa, tehokkaampaa ja nopeampaa. Kun sovelluksen rakenne huomioidaan alusta saakka, säästetään resursseja varsinaisten ominaisuuksien kehittämiseen.
Kun tarvitset osaavaa sovelluskehityspalvelua, ota yhteyttä!
Tässä blogitekstissä käsittelemme sovelluksen tekemisen vaiheita, alkaen konseptoinnista ja määrittelystä, aina koodaustyön toteutukseen ja teknologian valintaan.
Blogissa käsittelemme, miten ERP-integraatiot auttavat yhdistämään eri järjestelmät ja prosessit tehokkaammin, purkavat siilot ja tuovat lisää läpinäkyvyyttä liiketoimintaan.
Tekoäly mullistaa teknologia-alan. Lue, miten mm. Googlen entinen toimitusjohtaja Eric Schmidt ja muut asiantuntijat näkevät ohjelmistokehityksen tulevaisuuden.