Programação reativa versus padrão MVVM para gerenciar atualizações da GUI

10

A programação reativa e o MVVM são duas abordagens que podem solucionar o problema de separar a camada de domínio da interface do usuário.

  • O MVVM faz isso definindo um viewmodel, que é uma estrutura de dados mapeada para os componentes da interface do usuário. A interface do usuário exibe os dados e talvez atualize-os quando o usuário ocorrer.
  • uma estrutura reativa define um gráfico de observáveis ​​que notificam a interface do usuário que alguns dados foram alterados

Estruturas reativas estão ganhando participação, tanto em plataformas convencionais (com Rx em .net e java, react.js) quanto em locais mais experimentais (FRP em haskell).

Eu usei principalmente o MVVM com angular e considero a taxa de simplicidade para expressividade bastante satisfatória, embora eu tenha trabalhado apenas em projetos pequenos / médios com ele.

O que uma estrutura reativa compra para o desenvolvedor que o mvvm não?

Existe realmente alguma diferença? Por exemplo, knockout.js é anunciado como uma estrutura mvvm, mas tem uma sensação reativa em sua interface:

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

this.fullName = ko.computed(function() {
    return this.firstName() + " " + this.lastName();
}, this);
Simon Bergot
fonte
MVVM é um padrão para separar a preocupação da apresentação do domínio. Estruturas reativas são ferramentas que podem ser usadas para atingir esse padrão de separação. Eles não são exclusivos.
AlexFoxGill
@AlexG Bem, existem ferramentas que coordenam a comunicação entre um modelo de exibição e a interface do usuário. Eu chamaria essas estruturas MVVM.
Simon Bergot
O ponto permanece - o KnockoutJS usa uma estrutura reativa para permitir a separação de preocupações do MVVM. O AngularJS usa a verificação suja para ativar o MVVM. São apenas maneiras diferentes de alcançar o padrão. Talvez sua pergunta seja "O que o paradigma Reativo alcança em uma estrutura MVVM que a técnica Dirty-Checking não consegue?"
AlexFoxGill
@ AlexG, então você diria que é um detalhe de implementação? Eu acho que responde a minha pergunta.
Simon Bergot
@Simon: Eu não qualificá-lo como um detalhe de implementação, mas mais como diferentes abordagens de comunicar mudanças no modelo até o ViewModel
Bart van Ingen Schenau

Respostas:

9

Esses são conceitos não concorrentes diferentes e podem facilmente trabalhar juntos para produzir um ótimo resultado.

Em termos leigos:

O MVVM é útil para evitar a desordem do código por trás (GUI / acoplamento de modelo). A abordagem reativa é útil para reduzir a confusão de eventos / retornos de chamada.

Eu recomendaria aprender um pouco sobre XAML / WPF, pois a Microsoft é o inventor original do MVVM. A Microsoft também produziu uma implementação muito boa da abordagem Reativa: Extensões Reativas.

Aqui está uma tentativa decente de combiná-los:

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

Pergunta SO relacionada:

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

Den
fonte