Modell-nézet-nézetmodell

A Wikipédiából, a szabad enciklopédiából
A modell-nézet-nézetmodell szerkezete

A modell-nézet-nézetmodell minta (MVVM) egy architekturális minta.

A minta leválasztja a grafikus felhasználói felületet és az üzleti logikát (adatmodell). A nézetmodell értékkonverter,[1] ez a felelős az adatok átalakításáért a könnyű kezelhetőséghez és reprezentálásához. A nézetmodell inkább modell, mint nézet, de az hozza létre a megjelenítés logikáját is.[1] Megvalósíthatja a közvetítő programtervezési mintát is, megszervezve a hozzáférést a nézet használati esetei számára.

A modell-nézet-nézetmodell Martin Fowler prezentációs modell mintájának változata;[2][3] ugyanúgy vonatkoztatja el a nézet állapotát és viselkedését, de a prezentációs modell nézete nem függ a felhasználó platformjától.[3] A modell-nézet-nézetmodell és a prezentációs modell származtatható a modell-nézet-vezérlő mintából.

Mindkét mintát Ken Cooper és Ted Peters, a Microsoft architektjei fejlesztették ki, hogy egyszerűsítsék a felhasználó interfészek eseményvezérelt programozását. John Gossman, a Microsoft WPF és Silverlight tervezője blogján jelentette be a modell-nézet-nézetmodell mintát, ami kiterjeszti a két termék képességeit.[3]

A modell-nézet-nézetmodellre úgy is hivatkoznak, mint modell-nézet-összekötő, különösen a .NET platformján kívül. A Javában írt ZK webalkalmazás keretrendszer és a JavaScript KnockoutJS ezen a néven használja.[3][4][5]

Részei[szerkesztés]

A modell a tartománymodellre utal, ami a tartalom állapotát reprezentálja (objektumorientált módban), vagy adathozzáférési réteg (adatközpontú megközelítés).

A nézet egy szerkezet, elrendezés vagy megjelenítés, amit a felhasználó a képernyőn láthat. Ez a GUI[6]

A nézetmodell a nézet absztrakciója, ami publikus tulajdonságokat és metódusokat tartalmaz. Az MVC modell vezérlője vagy az MVP megjelenítője helyett az MVVM összekötőt tartalmaz, ami a nézetmodellben közvetít a nézet és az adatok között. A nézetmodellt az adatok állapotaként írják le a modellben.[7]

Az összekötőt a minta implicit tartalmazza. A Microsoft solution stackjében az összekötő egy leírónyelv, a XAML.[8] Ez segíti a programozót abban, hogy ne kelljen szószátyár kódot (boiler-plate) írnia a nézetmodell és a nézet között. Általában az ennek megvalósítására szolgáló technológia kulcsfontosságú a minta megvalósításában.[4][9]

Előnyei[szerkesztés]

Az MVVM-et úgy tervezték, hogy a WPF adatkapcsolati függvényeket használja, hogy jobban elkülönítse a nézet fejlesztését a minta többi részétől. Virtuálisan eltávolítja a GUI kódját a nézet rétegből.[10] A direkt kódolás helyett leírónyelvet használhatnak, és adatkapcsolatokat hozzanak létre a nézetmodellel, amit alkalmazásfejlesztők készítenek és tartanak karban. A szerepek elkülönítése miatt a nézet készítőinek nem kell foglalkozniuk az üzleti logikával. A rétegeket külön személyek vagy csapatok fejleszthetik, így jobban be lehet tartani a határidőket. Még egy fejlesztő is felgyorsul, ha ezt a mintát használja, mert a legtöbb változtatási igény a nézetet érinti, nem a logikát, így ahhoz ritkábban kell hozzányúlni.

A minta egyesíteni próbálja az MVC és az adatösszekötés előnyeit, miközben a keretrendszert az adatok összekapcsolásával olyan tisztán tartja, emennyire csak lehet.[10][11][12] Használja az összekötőt, a nézetmodellt és az üzleti réteg adatellenőrzését a bejövő adatok ellenőrzéséhez. Ennek eredményeként a modell és a keretrendszer végzi el a legtöbb műveletet, kiküszöbölve vagy minimalizálva az alkalmazáslogikát, amivel közvetlenül kezeli a nézetet.

Hátrányai[szerkesztés]

John Gossman, a minta megalkotója szerint az egyszerű műveletek a minta használata esetén lelassulnak,[13] különösen nagyobb alkalmazások esetén. Az adatösszekötés nagyon nagy méretű alkalmazásokban a memóriafogyasztást is érezhetően megnöveli.

Jegyzetek[szerkesztés]

  1. a b Google groups: Thought: MVVM eliminates 99% of the need for ValueConverters
  2. Martin Fowler: The Presentation Model Design Pattern. Martin Fowler.com, 2004. július 19.
  3. a b c d Smith, Josh (2009. február 1.). „WPF Apps with the Model-View-ViewModel Design Pattern”. MSDN Magazine.  
  4. a b Massey, Simon: Presentation Patterns in ZK. (Hozzáférés: 2012. március 24.)
  5. Steve Sanderson: KnockoutJS
  6. The MVVM Pattern. msdn.microsoft.com . (Hozzáférés: 2016. augusztus 29.)
  7. Pete Weissbrod: Model-View-ViewModel Pattern for WPF: Yet another approach.. [2008. február 1-i dátummal az eredetiből archiválva].
  8. Wildermuth, Shawn: Windows Presentation Foundation Data Binding: Part 1. Microsoft. (Hozzáférés: 2012. március 24.)
  9. ZK MVVM. Potix. (Hozzáférés: 2012. március 24.)
  10. a b Josh Smith: WPF Apps With The Model-View-ViewModel Design Pattern
  11. John Gossman. „Tales from the Smart Client: Introduction to Model/View/ViewModel pattern for building WPF apps”.  
  12. Karl Shifflett: Learning WPF M-V-VM.. [2009. április 13-i dátummal az eredetiből archiválva]. (Hozzáférés: 2017. augusztus 25.)
  13. John Gossman. „Tales from the Smart Client: Advantages and disadvantages of M-V-VM”.  

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Model–view–viewmodel című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.