Реактивное программирование и MVVM - это два подхода, которые могут решить проблему отделения доменного уровня от пользовательского интерфейса.
- MVVM делает это путем определения модели представления, которая представляет собой структуру данных, сопоставленную с компонентами пользовательского интерфейса. Пользовательский интерфейс отображает данные и, возможно, обновляет их при появлении пользователя.
- реактивная структура определяет график наблюдаемых, которые уведомляют пользовательский интерфейс о том, что часть данных изменилась
Реактивные фреймворки завоевывают популярность как на основных платформах (с Rx в .net & java, Reaction.js), так и в более экспериментальных местах (FRP в haskell).
Я в основном использовал MVVM с angular, и я нахожу соотношение простоты и выразительности вполне удовлетворительным, хотя с ним я работал только над небольшими / средними проектами.
Что реактивная структура покупает разработчику, а 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 полезен, чтобы уйти от беспорядка кода (GUI / модель). Реактивный подход полезен для уменьшения беспорядка события / обратного вызова.
Я бы порекомендовал немного узнать о XAML / WPF, поскольку Microsoft является первоначальным изобретателем MVVM. Microsoft также разработала очень хорошую реализацию подхода Reactive: Reactive Extensions.
Вот достойная попытка объединить их:
http://www.reactiveui.net https://github.com/reactiveui/ReactiveUI
Связанный так вопрос:
/programming/1763411/reactive-extensions-rx-mvvm
источник