Реактивне програмування та схема MVVM для управління оновленнями графічного інтерфейсу


11

Реактивне програмування та MVVM - це два підходи, які можуть вирішити проблему відділення доменного шару від інтерфейсу користувача.

  • MVVM робить це, визначаючи модель перегляду, яка є структурою даних, відображеною на компоненти інтерфейсу. Користувальницький інтерфейс відображає дані та, можливо, оновлює їх у випадку виникнення користувача.
  • реактивна основа визначає графік спостережуваних даних, які сповіщають інтерфейс користувача про те, що частина даних змінилася

Реактивні рамки набирають частку розуму, як в основних платформах (з Rx в .net & java, react.js), так і в більш експериментальних місцях (FRP в haskell).

В основному я використовував MVVM з кутовим, і вважаю, що співвідношення простоти до виразності є цілком задовольняючим, хоча я працював над ним лише на малих та середніх проектах.

Що реактивна основа купує розробнику, що mvvm не робить?

Чи справді є різниця? Наприклад, knockout.js рекламується як рамка mvvm, але в його інтерфейсі є реактивне відчуття:

this.firstName = ko.observable("John");
this.lastName = ko.observable("Smith");

this.fullName = ko.computed(function() {
    return this.firstName() + " " + this.lastName();
}, this);

MVVM - це схема відокремлення проблеми презентації від домену. Реактивні рамки - це інструменти, за допомогою яких можна досягти цієї схеми поділу. Вони не є ексклюзивними.
AlexFoxGill

@AlexG Добре, є інструменти, які координують зв'язок між viewmodel і інтерфейсом користувача. Я б назвав ці рамки MVVM.
Саймон Берго

Справа полягає в тому, що KnockoutJS використовує реактивну структуру, щоб дозволити MVVM розділити проблеми. AngularJS використовує брудну перевірку для включення MVVM. Вони просто різні способи досягнення схеми. Можливо, ваше запитання - "Чого досягає реактивна парадигма в рамках MVVM, якої не має техніка брудної перевірки?"
AlexFoxGill

@AlexG, так що ви б сказали, що це деталь реалізації? Я думаю, що це відповідає на моє запитання.
Саймон Берго

@Simon: Я б не кваліфікував це як детальну інформацію про реалізацію, але більше як різні підходи донесення змін у Моделі аж до ViewModel
Барт ван Інген Шенау

Відповіді:


10

Це різні неконкурентоспроможні концепції, і вони можуть легко працювати разом, щоб досягти чудового результату.

Простіше кажучи:

MVVM корисно відійти від безладу коду (GUI / моделі муфти). Реактивний підхід корисний для зменшення безладу подій / зворотних викликів.

Я рекомендую трохи дізнатися про XAML / WPF, оскільки Microsoft є оригінальним винахідником MVVM. Корпорація Майкрософт також дуже добре реалізувала реактивний підхід: Реактивне розширення.

Ось гідна спроба їх поєднання:

http://www.reactiveui.net https://github.com/reactiveui/ReactiveUI

Пов'язане питання ТА:

/programming/1763411/reactive-extensions-rx-mvvm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.