Applikationsutveckling med MVVM



Applikationsutveckling med MVVMDet ?r i dag, och har varit i m?nga ?r, en vedertagen branchstandard inom applikationsutveckling att anv?nda sig av n?gon typ av arkitekturell l?sning f?r att separera presentation (UI), presentationslogik och aff?rslogik fr?n varandra. De f?rdelar man uppn?r genom att separera programlogiken fr?n presentationen ?r fr?mst:F?rb?ttrad m?jlighet till testning. Genom att separera ut interaktions och datalogik till ett objekt som ?r separat fr?n UI definitionen s? kan man enhetstesta den logiken.Det blir l?ttare att ?teranv?nda koden. I m?nga fall kan presentationslogiken ?teranv?ndas f?r olika visuella presentationer av samma data.Koden blir l?ttare att underh?lla. Mjukvara med v?l separerade och distinkta ansvarsomr?den leder till h?gre m?jlighet att att f?r?ndra eller underh?lla mjukvaran utan o?nskade sidoeffekter.Det finns flera s?tt att uppn? en s?dan separation. Ett av dem ?r designm?nstret MVVM, Model-View-View Model. Den h?r artikeln syftar till att ge en ?versikt ?ver MVVM, samt ge n?gra tips p? teknologier som kan underl?tta implementationen.HistoriaEtt av de tidigaste designm?nstren f?r separation av UI, data och logik heter PM, Presentation Model och introducerades av Martin Fowler. Fr?n detta ursprungliga m?nster har ett flertal mer specialiserade m?nster uppkommit. De mest traditionellt k?nda ?r MVP (Model-View-Presenter) och MVC (Model-View-Controller). F?r b?da dessa m?nster ?r det Presenter/Controllers ansvar att vidarebefordra anv?ndarinteraktion och dataf?r?ndringar mellan UI och modell. De st?rsta problemen med dessa l?sningar har varit att en stor del av koden har varit till f?r att synkronisera data och interaktion mellan UI och modell, och stor del av denna ?r repeterad kod med endast sm? skillnader f?r anpassning till vilket UI element som beh?vs synkroniseras.L?sningen f?r att slippa handkoda synkronisering av data och kommandon ?r MVVM m?nstret, som inf?r begreppet Binder f?r automatiserad bindning av UI element till data.MVVMView (UI)View ModelModelPresentation (UI) & Presentation LogicBusiness Logic & DataData BindingView (UI)View ModelModelPresentation (UI) & Presentation LogicBusiness Logic & DataData BindingFigur 1: MVVMMVVM ?r f?rkortning f?r Model-View-ViewModel och ?r ett arkitektur-m?nster framtaget av Micrsoft f?r deras .NET WPF/Silverlight applikationsplattform, baserat p? MVC m?nstret som introducerades av Martin Fowler. Namgivningen p? m?nstret leder ofta till f?rvirring och missuppfattningar brukar uppst? vad det g?ller ordningen p? de inblandade objekten. Den korrekta ordningen borde vara, uppifr?n och ned i en ”lagermodell”, View-View Model- Model. En mer korrekt akronym skulle s?ledes kanske vara VVMM.M?nstret togs fram f?r att bland annat f? bort det on?diga skapandet av kod f?r att synkronisera data och kommunicera mellan View (UI) och View Model, och i st?llet l?ta generellt beteende i ramverket l?sa dessa problem.MVVM best?r av dessa delar:View: Anv?ndargr?nssnittet, UIView Model: Data-abstraktion av vy, anpassninslager mellan View och ModelModel: Dom?nmodell och/eller Data Access Lager, dom?nlogik och dom?ndataBinder: Databindning, mekanik f?r att deklarativt koppla element i UI till data i ViewModel.View-ViewModel komposition: Sammankoppling i runtime mellan en viss vy och vymodell.Huvudprincipen i MVVM f?r att uppn? is?rkoppling View – View Model – Model ?r tumregeln ”never look up”. Om man ser hela MVVM enligt tidigare bild s? inneb?r detta att View Model aldrig f?r ha n?gon k?nnedom om vilken View den anv?nds i och Model f?r inte ha n?gon k?nnedom om View Model. View m?ste ha k?nnedom om View Model, men med hj?lp av Binder s? beh?ver den inte ha konkret k?nnedom om typen av View Model utan enbart k?nna till gr?nssnittet som View Model implementerar. View Model kan ha obegr?nsad k?nnedom om Model lagret utan att det g?r emot reglerna. Notera att man i bilden ?ven till?ter indirekt koppling via data-bindning fr?n View till Model. Detta kan till?tas f?r att binding teknologin inte beror p? h?rda typkopplingar ned?t, utan skall arbeta med meta-data s?som namn p? egenskaper och kommandon.M?nstret har ?ven ?verf?rts till webutveckling, d? det med senare tids st?rre fokus p? komplicerade web-klientapplikationer blivit n?dv?ndigt att strukturera upp ?ven dessa f?r att kunna uppn? ovanst?ende ?nskv?rda mjukvaruegenskaper.View-ViewModelF?r Windows och Silverlight applikationer anv?nds XAML (XML Application Markup Language) f?r att beskriva UI. En ViewModel implementeras i valfritt .NET spr?k s?som C#. Sammans?ttning av View – View Model g?rs genom att s?tta en Views DataContext egenskap till instansen av den ViewModel som skall anv?ndas. Instansiering och sammankoppling kan g?ras med valfri teknik, s?som f?r detta avsedda ramverk. Exempel p? s?dana ramverk ?r bland annat MS Prism och Caliburn Micro. Det g?r ?ven i enklare applikationsfall att instansiera en View Model direkt i XAML f?r den View som den skall kopplas till, vilket kan vara l?mpligt f?r mobila applikationer med ett f?tal vyer.Webklient-UI beskrivs i HTML och ViewModels implementeras oftast direkt i JavaScript. Det finns ett antal ramverk f?r vykomposition s?som Durandal och AngularJS som ?ven har sin egen implementation av Binder f?r data-binding.ModelImplementationen av Model-delen har inte s? mycket att g?ra med MVVM, men typiska arkitekturella l?sningar ?r att anv?nda en objektcentrerad l?sning med Dom?n Modell, eller en datacentrerad l?sning med ett Data Access Lager, eller en kombination av b?da. Datasynkronisering Datasynkronisering och vidarebefordring av anv?ndarinteraktion mellan View – View Model sk?ts med hj?lp av databindning. Man beskriver i UI-koden vilket data ett UI element skall kopplas till varp? Binder-teknologin ser till att f?r?ndringar i data kommuniceras upp till vyn och att anv?ndarinteraktion kommuniceras ner till ViewModel.I WPF l?sningar anv?nds den inbyggda Binding-modellen f?r detta ?ndam?l genom att i XAML deklarera en Binding till en angiven property i ViewModel. Det finns ?ven andra l?sningar f?r att binda samman vyelement och ViewModel. Till exempel anv?nder Caliburn Micro namnet p? vyelementet f?r att binda elementet till data.F?r webklienter i HTML och JavaScript finns ett antal frameworks f?r vykomposition och databinding, s?som KnockoutJS som enbart hanterar databindning, och mer avancerade frameworks som Durandal och AngularJS som ?ven hanterar View-ViewModel komposition.AvslutningsvisDetta ?r inte en p? n?got s?tt utt?mmande artikel om MVVM eller en l?sning p? hur man enligt best-practices skall implementera en applikation i dag, men jag hoppas att den gett dig en liten insikt om vad MVVM inneb?r och n?gra ledtr?dar som kan leda vidare till mera information.MVVM skall kanske heller inte ses som allenar?dande l?sning p? hur man skall konstruera applikationer, den har dock visat sig ha f?tt starkt fotf?ste vid utveckling av s?v?l sm? konsumentapplikationer som tunga aff?rsapplikationer inom branschen. Omfattande st?d f?r ramverksutveckling av MVVM implementationer kan ocks? ses, speciellt inom Webutvecklingsomr?det d?r f?retag med stora resurser som Google och Microsoft ?r med och utvecklar och st?ttar Open Source projekt. ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download