MVC

Az MVC paradigma egy szoftvertervezési minta / architektúra, mely a főként a webes alkalmazásoknál elterjedt. A monolitikus szoftverarchitektúrákat leváltó, három rétegű csoportosításról van szó, amiben az alkalmazás logikáját, vezérlését és felhasználói felületét elkülönítve kezeljük. A szeparáció legfőbb előnye, hogy egymástól függetlenül, akár modulárisan kicserélhetővé válnak egyes kódrészek, biztosítva, hogy például a UI lecserélését az üzleti logika átírása nélkül, tisztán és fájdalommentesen el tudjuk végezni.

Az MVC három rétege:

Model

A Model réteg modellosztályok összességéből áll. Egy-egy modellosztály általában az adatbázis egy tábláját és az adattípuson végezhető műveleteket reprezentálja és valósítja meg, de lehet az adatbázistól független bármilyen absztrakció is. Régi keretrendszerek elterjesztették azt a terminológiai hibát, ami miatt a modellosztályokat szokás modellnek is nevezni, pedig a kettő más fogalmat takar. A modell, mint réteg szerepel az alkalmazásunkban, modellből egyetlen egy van. Ha valaki "models" könyvtárban dolgozik vagy "modellekként" emleget valamit, bizonyára a modellosztályra gondol. Ez a nüansznyi dolog fontos lehet a Model működésének megértésében.

View

A View -szerencsétlenül- az MVC második betűje. Azért "szerencsétlenül", mert a Model közvetlenül nem kommunikál a Nézettel. A Nézet gyakorlatilag a frontendet jelenti, legyen az HTML, vagy egy desktop alkalmazás GUI-ja. A view generálásához gyakran használnak különféle template managereket, amelyek rövidebb és átláthatóbb kóddal emelik be a Modeltől közvetetten megkapott megjelenítendő változókat.

Controller

A Controller (Vezérlő) végzi az összeköttetést az MVC két másik rétege között. A Controller felelős a felhasználói inputok feldolgozásáért. A feldolgozás úgy értendő, hogy ebbe az adatbázisműveletek és a típusreprezentációval, integritással kapcsolatos funkcionalitás már nem tartozk bele - ez mind a modell feladata. A Vezérlő továbbá bizonyos user inputra bizonyos válaszokat adhat, lekérdezheti az adatbázist a modellen keresztül, majd továbbadhatja a kapott információt a Nézetnek.

A "Skinny Controller, Fat Model" elv

Mindent meg lehet valósítani a Controllerben. Kiíratást, lekérdezést, bármit. Akik most szembesülnek először az MVC-vel, gyakran el is követik ezt a tervezési hibát. Ahogy a neve is mutatja, valaki kitalálta -és nem véletlenül-, hogy jobb lenne a vezérlőket minél vékonyabbra karcsúsítani, amit lehet, azt pedig a modellbe átpakolni. Ez alapvetően jó ötlet, de meg kell érezni a helyes egyensúlyt. Akkor nincs értelme a réteges alkalmazásfelépítésnek, ha valamelyik réteg haszontalan vagy alig lát el feladatot. Így tehát, odafigyelés mellett, a SCFM jó példát mutat.

Mikor tegyünk valamit a modellbe és mikor a controllerbe?

Az az alapvető szabály, hogy ha a kód egy típust, típussal kapcsolatos műveleteket (típuskonverziót, adattagok módosítását, stb), vagy a típus helyességének ellenőrzését valósítja meg, akkor az egy modellosztályba való. Így például egy input mező helyes kitöltésének vizsgálata a modell réteg feladata és nem a vezérlőé. A vezérlőé jelen példában az, hogy az input mező tartalmát eljuttassa a modellhez és a feldolgozás utáni választ visszaadja a felhasználói felületet jelentő nézetnek.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.