MVC Model View Controller
Szoftver fejlesztés régen Console-based alkalmazások Pure HTML weboldalak Assembly, C Tipikusan kevés fejlesztő (Johm Carmack Wolfenstein, Doom, Quake..) Szűkös erőforrások optimális kód
Szoftver fejlesztés ma Rich alkalmazások (mobil, desktop) Komplex portálok web appok Fejlett OO programnyelvek Akár több száz fejlesztő 1 projekten Bőven vannak erőforrások nem kell többé byte szintű optimális kód
Szoftver fejlesztés ma Nincs többé univerzális programozó : Adatbázis programozó Field know-how -al rendelkező programozó Backed fejlesztő Frontend fejlesztő UX engineer Mindegyiknek bele kell nyúlnia a kódba
Cél : Kód modulokra bontása Komponensek (modulok) újrahasználása Komponensek (modulok) kicserélése Programozási feladatok szétbontása Tesztelhetőség
Ezekre a problémákra egy lehetséges megoldás az MVC design pattern
MVC - eredet 70-es évek végén a smalltalk nyelvben először (Xerox) grafikus UI megjelenésekor
MVC - szárnyalás Az MVC a webes, illetve objective c (ios) fejlesztések során kapott nagy figyelmet, és napjainkban is jelentősen meghatározza szinte bármely GUI-val rendelkező szoftver felépítését.
MVC - működés Az MVC három rétegre bontja az alkalmazást : Model (pl. adatbázis) View (amit a user lát GUI) Controller (Összeköti a View-t a Model-el, gyakorlatilag a business logic található itt azaz a modelt-t a UI bemeneteknek megfelelően változtatja)
Miért pont model view controller? 1870-ben valaki írt egy novellát 1927-ben kiadták könyvben 1987-ben készítettek egy filmet róla 2002-ben kiadták hangoskönyvként 1 novella 3 féle reprezentáció
Miért pont model view controller? Gyakran ugyanazt a problémát többféleképpen lehet megjeleníteni Change requestek (finomítások, módosítások) leggyakrabban a UI kapcsán merülnek fel (experimentation) Gyakorlatilag szétválasztjuk a kódot ami tartalmazza a problémát, attól, ami megjeleníti.
Működés
MVC frameworks server side Zend Framework (PHP) Asp.NET MVC Sok más Miért kell framework egy patternre?
Miért kell framework egy patternre? Kód standarizálása azáltal, hogy belekényszerít egy módszertanba (naming, layout, stb..) Platform függő nyelvi elemek megvalósítása standardizálása, pl : Melyik class mikor hívódik meg Hogy működik a kommunikáció (technikailag) az egyes részek között.
Példa felépítés szerver oldal Model classok Controller Classok View templatek
Példa felépítés Model classok Adatbázissal való kommunikációért felelnek update, select, stb. ORM-ek generálják tipikusan nekünk Lényegében az adatbázis réteg
Példa felépítés Model classok class User { private int _userid; private string _firstname; private string _lastname } public function setuserid(id:int); public function getuserid(id:int); public function setfirstname Gondoskodik az adatbázis kapcsolat felépítéséről, lebontásáról, mezők lekérdezéséről, updateléséről stb..
Példa felépítés Controller classok Kívülről : URL-ek, pl. xx.hu/user Függvények user input lekezelésére pl. xx.hu/user/update?id=12&firstname=b&lastname=c Lekezelik a user inputot, validálják a jogosultságot, updatelik a modelt.
Példa felépítés Controller classok class UserController { public function updateuserinfo(id:int, firstname:string, lastname:string); } public function getuserinfo(id:int); Mindem controller actionhöz (itt : függvény) tartozik egy view.
Példa felépítés View templatek Minden actionhoz egy Általában : HTML template Lényegében kirajzolja a weblapot.
Példa felépítés View templatek getuserinfo.html.template <html> <head> Get User Info </head> <body> <%script user:user = viewdata[ user ] %> User Neve : <%script write user.firstname + user.lastname %> </body>
MVC alkalmazása desktop/mobil app esetén Model classok Lokális-remote adatbázis, webservice-től kapott adat, stb.. Controller Classok View Classok
Példa felépítés View classok Rendkívül bonyolultak lehetnek UI fejlesztő szerepe Manapság rendkívüli fontosság (pl. Twitter kliensek lényegében itt a különbség)
Tipikus mobil app Dupla MVC Server side MVC response XML-JSON formátumban Client side MVC
MVC alternatívák : MVP Model View Presenter View és model közti eseményekért felelős
MVC alternatívák : MVP View nem ismeri a modelt. Presenter függvényeken keresztül manipulálja a view t (pl. settext) Könnyű view tesztelhetőséget eredményez (Test driven development hozománya) csak az interface kell a view-nak.
Model View ViewModel MVC alternatívák : MVVM Tipikusan Windows/ XAML appokban, data binding okán
MVC alternatívák : MVVM A ViewModel nem generikus minden Viewnak van egy sajátja arra épül, hogy kiszolgálja a view-t. Lehet data bindingelni a ViewModel-t a viewhez az majd updateli az adatbázist. Előny : A View-nak nem kell semmiről tudnia a ViewModel-en kívül (model változtatása nem hat ki rá), mégis lehet data binding-et alkalmazni.
Összefoglalás MVC is not magic, de egy jó irány a struktúrált kód felé Átláthatóvá, könnyen debuggolhatóvá, és módosíthatóvá teszi a kódot. Értsük meg, és használjuk ahol tudjuk Egyes frameworkök tanulási görbélye meredek lehet, de megéri az erőfeszítéseket.