Реактивное программирование и 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);