Model-View-ViewModel — шаблон проєктування, що застосовується під час проєктування архітектури застосунків (додатків). Публічно вперше був представлений Джоном Госсманом (John Gossman) у 2005 році як модифікація шаблону Presentation Model. MVVM орієнтований на такі сучасні платформи розробки, як Windows Presentation Foundation та Silverlight від компанії Microsoft.
MVVM полегшує відокремлення розробки графічного інтерфейсу від розробки бізнес логіки (бек-енд логіки), відомої як модель (можна також сказати, що це відокремлення представлення від моделі). Модель представлення є частиною, яка відповідає за перетворення даних для їх подальшої підтримки і використання. З цієї точки зору, модель представлення більше схожа на модель, ніж на представлення і оброблює більшість, якщо не всю, логіку відображення даних. Модель представлення може також реалізовувати патерн медіатор, організовуючи доступ до бек-енд логіки навколо множини правил використання, які підтримуються представленням.
Призначення
MVVM використовується для відокремлення моделі та її відображення. Необхідністю цього є надання можливості змінювати їх незалежно одну від одної. Наприклад, розробник працює над логікою роботи з даними, а дизайнер — з користувацьким інтерфейсом.
MVVM була створена з метою поділу праці дизайнера і програміста, що є неможливим, коли Java-розробник намагається побудувати GUI в Swing або розробник на Visual C++ намагається створити користувальницький інтерфейс в MFC. Розробники кмітливі і мають безліч навичок, але створення зручних і привабливих інтерфейсів вимагає абсолютно інших талантів, ніж ті, якими вони володіють. Ця робота більше підходить для дизайнерів інтерфейсів. Хороші дизайнери інтерфейсів краще знають, чого бажають користувачі, ніж експерти в області проєктування і написання коду. Зрозуміло, буде краще, якщо дизайнер інтерфейсів створить інтерфейс, а розробник напише код, який реалізує логіку цього інтерфейсу, але технології типу Swing або MFC просто-напросто не дозволяють чинити таким чином.
Використання
- MVVM зручно використовувати замість класичного MVC та йому подібних у тих випадках, коли на платформі, де ведеться розробка, присутнє «зв'язування даних».
В MVC/MVP зміни у користувацькому інтерфейсі не впливають безпосередньо на модель, а йдуть через Контролер/Presenter. У таких технологіях, як WPF та Silverlight, присутня концепція «зв'язування даних», що дозволяє зв'язувати дані із візуальними елементами в обидві сторони.
Архітектура MVVM вирішує цю проблему ясним поділом відповідальності:
- Розробка користувацького інтерфейсу здійснюється дизайнером інтерфейсів за допомогою технології, більш-менш природної для такої роботи (XML)
- Логіка користувацького інтерфейсу реалізується розробником як компонент ViewModel
- Функціональні зв'язки між користувацьким інтерфейсом та ViewModel реалізуються через біндинги (bindings), які, по суті, є правилами типу «якщо кнопка A була натиснута, повинен бути викликаний метод onButtonAClick() з ViewModel». Біндинги можуть бути написані в коді або визначені декларативним шляхом (Android використовує обидва типи).
Архітектура MVVM використовується в тому чи іншому вигляді усіма сучасними технологіями, наприклад Microsoft WPF і Silverlight, Oracle JavaFX, Adobe Flex, AJAX.
Опис
Шаблон MVVM ділиться на три частини:
- Модель (Model), як і в класичному шаблоні MVC, Модель являє собою фундаментальні дані, що необхідні для роботи застосунку.
- Вигляд (View) як і в класичному шаблоні MVC, Вигляд — це графічний інтерфейс, тобто вікно, кнопки тощо.
- Модель вигляду (ViewModel, що означає «Model of View») з одного боку є абстракцією Вигляду, а з іншого надає обгортку даних з Моделі, які мають зв'язуватись. Тобто вона містить Модель, яка перетворена до Вигляду, а також містить у собі команди, якими може скористатися Вигляд для впливу на Модель. Фактично ViewModel призначена для того, щоб:
- Здійснювати зв'язок між моделлю та вікном
- Відслідковувати зміни в даних, що зроблені користувачем
- Відпрацьовувати логіку роботи View (механізм команд)
Реалізація
Приклад реалізації шаблону у Windows Presentation Foundation.
Оголосимо модель, що містить логіку застосунку, не залежну від представлення.
public class OrderDto { public string Name { get; set; } } public interface IOrdersModel { OrderDto[] LoadOrders(); } public class OrdersModel : IOrdersModel { public OrderDto[] LoadOrders() { return new OrderDto[] { new OrderDto(){ Name = "Item1" }, new OrderDto(){ Name = "Item2" }, }; } }
Додамо модель вигляду — компонент, що зв'язує логіку застосунку (модель) із виглядом.
public class OrderViewModel { private readonly IOrdersModel ordersModel; // колекція, що вміє сповіщати про зміну своїх даних public ObservableCollection<string> Orders { get; set; } = new ObservableCollection<string>(); public OrderViewModel(IOrdersModel ordersModel) { this.ordersModel = ordersModel; } // метод-обробник, виконується при взаємодії користувача із виглядом public ICommand LoadOrders => new RelayCommand((object sender) => { // керування моделю var orders = ordersModel.LoadOrders(); // оновлення колекції до якої прив'язаний вигляд foreach (var order in orders) { Orders.Add(order.Name); } }); }
Та додамо вигляд — для взаємодії із користувачем.
<Window> <Button Command="{Binding LoadOrders}" /> // зв'язування даних <ListBox ItemsSource="{Binding Orders}"/> </Window>
Примітки
- . Архів оригіналу за 12 червня 2011. Процитовано 21 червня 2011.
Це незавершена стаття про програмне забезпечення. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Model View ViewModel shablon proyektuvannya sho zastosovuyetsya pid chas proyektuvannya arhitekturi zastosunkiv dodatkiv Publichno vpershe buv predstavlenij Dzhonom Gossmanom John Gossman u 2005 roci yak modifikaciya shablonu Presentation Model MVVM oriyentovanij na taki suchasni platformi rozrobki yak Windows Presentation Foundation ta Silverlight vid kompaniyi Microsoft Diagrama vzayemodiyi mizh komponentami shablonu MVVM MVVM polegshuye vidokremlennya rozrobki grafichnogo interfejsu vid rozrobki biznes logiki bek end logiki vidomoyi yak model mozhna takozh skazati sho ce vidokremlennya predstavlennya vid modeli Model predstavlennya ye chastinoyu yaka vidpovidaye za peretvorennya danih dlya yih podalshoyi pidtrimki i vikoristannya Z ciyeyi tochki zoru model predstavlennya bilshe shozha na model nizh na predstavlennya i obroblyuye bilshist yaksho ne vsyu logiku vidobrazhennya danih Model predstavlennya mozhe takozh realizovuvati patern mediator organizovuyuchi dostup do bek end logiki navkolo mnozhini pravil vikoristannya yaki pidtrimuyutsya predstavlennyam PriznachennyaMVVM vikoristovuyetsya dlya vidokremlennya modeli ta yiyi vidobrazhennya Neobhidnistyu cogo ye nadannya mozhlivosti zminyuvati yih nezalezhno odnu vid odnoyi Napriklad rozrobnik pracyuye nad logikoyu roboti z danimi a dizajner z koristuvackim interfejsom MVVM bula stvorena z metoyu podilu praci dizajnera i programista sho ye nemozhlivim koli Java rozrobnik namagayetsya pobuduvati GUI v Swing abo rozrobnik na Visual C namagayetsya stvoriti koristuvalnickij interfejs v MFC Rozrobniki kmitlivi i mayut bezlich navichok ale stvorennya zruchnih i privablivih interfejsiv vimagaye absolyutno inshih talantiv nizh ti yakimi voni volodiyut Cya robota bilshe pidhodit dlya dizajneriv interfejsiv Horoshi dizajneri interfejsiv krashe znayut chogo bazhayut koristuvachi nizh eksperti v oblasti proyektuvannya i napisannya kodu Zrozumilo bude krashe yaksho dizajner interfejsiv stvorit interfejs a rozrobnik napishe kod yakij realizuye logiku cogo interfejsu ale tehnologiyi tipu Swing abo MFC prosto naprosto ne dozvolyayut chiniti takim chinom VikoristannyaMVVM zruchno vikoristovuvati zamist klasichnogo MVC ta jomu podibnih u tih vipadkah koli na platformi de vedetsya rozrobka prisutnye zv yazuvannya danih V MVC MVP zmini u koristuvackomu interfejsi ne vplivayut bezposeredno na model a jdut cherez Kontroler Presenter U takih tehnologiyah yak WPF ta Silverlight prisutnya koncepciya zv yazuvannya danih sho dozvolyaye zv yazuvati dani iz vizualnimi elementami v obidvi storoni Arhitektura MVVM virishuye cyu problemu yasnim podilom vidpovidalnosti Rozrobka koristuvackogo interfejsu zdijsnyuyetsya dizajnerom interfejsiv za dopomogoyu tehnologiyi bilsh mensh prirodnoyi dlya takoyi roboti XML Logika koristuvackogo interfejsu realizuyetsya rozrobnikom yak komponent ViewModelFunkcionalni zv yazki mizh koristuvackim interfejsom ta ViewModel realizuyutsya cherez bindingi bindings yaki po suti ye pravilami tipu yaksho knopka A bula natisnuta povinen buti viklikanij metod onButtonAClick z ViewModel Bindingi mozhut buti napisani v kodi abo viznacheni deklarativnim shlyahom Android vikoristovuye obidva tipi Arhitektura MVVM vikoristovuyetsya v tomu chi inshomu viglyadi usima suchasnimi tehnologiyami napriklad Microsoft WPF i Silverlight Oracle JavaFX Adobe Flex AJAX OpisShablon MVVM dilitsya na tri chastini Model Model yak i v klasichnomu shabloni MVC Model yavlyaye soboyu fundamentalni dani sho neobhidni dlya roboti zastosunku Viglyad View yak i v klasichnomu shabloni MVC Viglyad ce grafichnij interfejs tobto vikno knopki tosho Model viglyadu ViewModel sho oznachaye Model of View z odnogo boku ye abstrakciyeyu Viglyadu a z inshogo nadaye obgortku danih z Modeli yaki mayut zv yazuvatis Tobto vona mistit Model yaka peretvorena do Viglyadu a takozh mistit u sobi komandi yakimi mozhe skoristatisya Viglyad dlya vplivu na Model Faktichno ViewModel priznachena dlya togo shob Zdijsnyuvati zv yazok mizh modellyu ta viknom Vidslidkovuvati zmini v danih sho zrobleni koristuvachem Vidpracovuvati logiku roboti View mehanizm komand RealizaciyaPriklad realizaciyi shablonu u Windows Presentation Foundation Ogolosimo model sho mistit logiku zastosunku ne zalezhnu vid predstavlennya public class OrderDto public string Name get set public interface IOrdersModel OrderDto LoadOrders public class OrdersModel IOrdersModel public OrderDto LoadOrders return new OrderDto new OrderDto Name Item1 new OrderDto Name Item2 Dodamo model viglyadu komponent sho zv yazuye logiku zastosunku model iz viglyadom public class OrderViewModel private readonly IOrdersModel ordersModel kolekciya sho vmiye spovishati pro zminu svoyih danih public ObservableCollection lt string gt Orders get set new ObservableCollection lt string gt public OrderViewModel IOrdersModel ordersModel this ordersModel ordersModel metod obrobnik vikonuyetsya pri vzayemodiyi koristuvacha iz viglyadom public ICommand LoadOrders gt new RelayCommand object sender gt keruvannya modelyu var orders ordersModel LoadOrders onovlennya kolekciyi do yakoyi priv yazanij viglyad foreach var order in orders Orders Add order Name Ta dodamo viglyad dlya vzayemodiyi iz koristuvachem lt Window gt lt Button Command Binding LoadOrders gt zv yazuvannya danih lt ListBox ItemsSource Binding Orders gt lt Window gt Primitki Arhiv originalu za 12 chervnya 2011 Procitovano 21 chervnya 2011 Ce nezavershena stattya pro programne zabezpechennya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi