MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van...

29
MVC Model View Controller

Transcript of MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van...

Page 1: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC

Model View Controller

Page 2: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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

Page 3: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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

Page 4: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

• 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

Szoftver fejlesztés ma

Page 5: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

• Komponensek (modulok) újrahasználása

• Komponensek (modulok) kicserélése

• Programozási feladatok szétbontása

• Tesztelhetőség

Cél : Kód modulokra bontása

Page 6: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Ezekre a problémákra egy lehetségesmegoldás az MVC design pattern

Page 7: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC - eredet

• ’70-es évek végén a smalltalk nyelvben először(Xerox) – grafikus UI megjelenésekor

Page 8: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC - szárnyalás

• Az MVC a webes, illetve objective c (iOS) fejlesztések során kapott nagy figyelmet, ésnapjainkban is jelentősen meghatározza szintebármely GUI-val rendelkező szoftverfelépítését.

Page 9: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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őenváltoztatja)

Page 10: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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ó

Page 11: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Miért pont model view controller?

• Gyakran ugyanazt a problémáttö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 amitartalmazza a problémát, attól, amimegjeleníti.

Page 12: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Működés

Page 13: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC frameworks – server side

– Zend Framework (PHP)

– Asp .NET MVC

– … Sok más

• Miért kell framework egy patternre?

Page 14: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Miért kell framework egy patternre?

• Kód standarizálása azáltal, hogy belekényszerítegy 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) azegyes részek között.

Page 15: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Példa felépítés – szerver oldal

• Model classok

• Controller Classok

• View templatek

Page 16: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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”

Page 17: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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őklekérdezéséről, updateléséről stb..

Page 18: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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.

Page 19: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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.

Page 20: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Példa felépítés – View templatek

• Minden actionhoz egy

• Általában : HTML template

• Lényegében kirajzolja a weblapot.

Page 21: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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>

Page 22: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC alkalmazása desktop/mobilapp esetén

• Model classok

– Lokális-remote adatbázis, webservice-től kapottadat, stb..

• Controller Classok

• View Classok

Page 23: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

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)

Page 24: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Tipikus mobil app – Dupla MVC

• Server side MVC – response XML-JSON formátumban

• Client side MVC

Page 25: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC alternatívák : MVP

• Model

• View

• Presenter– View és model

közti eseményekértfelelős

Page 26: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC alternatívák : MVP

• View nem ismeri a modelt.

• Presenter függvényeken keresztül manipuláljaa view – t (pl. setText)

• Könnyű view tesztelhetőséget eredményez(Test driven development hozománya) – csakaz interface kell a view-nak.

Page 27: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC alternatívák : MVVM

• Model

• View

• ViewModel

• Tipikusan Windows/XAML appokban,data binding okán

Page 28: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

MVC alternatívák : MVVM

• A ViewModel nem generikus – minden View-nak van egy sajátja – arra épül, hogykiszolgálja a view-t.

• Lehet data bindingelni a ViewModel-t a view-hez – 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 nemhat ki rá), mégis lehet data binding-et alkalmazni.

Page 29: MVC · 2015-04-23 · MVC alternatívák: MVVM •A ViewModel nem generikus –minden View-nak van egy sajátja–arra épül, hogy kiszolgáljaa view-t. •Lehet data bindingelni

Összefoglalás

• MVC is not magic, de egy jó irány a struktúráltkód felé

• Átláthatóvá, könnyen debuggolhatóvá, ésmódosíthatóvá teszi a kódot.

• Értsük meg, és használjuk ahol tudjuk

• Egyes frameworkök tanulási görbélye meredeklehet, de megéri az erőfeszítéseket.