Programación reactiva vs patrón MVVM para gestionar actualizaciones de GUI

10

La programación reactiva y MVVM son dos enfoques que pueden abordar el problema de separar la capa de dominio de la interfaz de usuario.

  • MVVM hace esto definiendo un modelo de vista, que es una estructura de datos asignada a componentes de la interfaz de usuario. La interfaz de usuario muestra los datos y puede actualizarlos cuando ocurre el usuario.
  • Un marco reactivo define un gráfico de observables que notifican a la interfaz de usuario que algún dato ha cambiado.

Los marcos reactivos están ganando participación mental, tanto en las plataformas principales (con Rx en .net y java, react.js) como en lugares más experimentales (FRP en haskell).

Principalmente he usado MVVM con angular, y encuentro que la relación de simplicidad a expresividad es bastante satisfactoria, aunque solo he trabajado en proyectos pequeños / medianos con él.

¿Qué compra un framework reactivo al desarrollador que mvvm no?

¿Existe realmente una diferencia? Por ejemplo, knockout.js se anuncia como un marco mvvm, pero tiene una sensación reactiva en su interfaz:

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

this.fullName = ko.computed(function() {
    return this.firstName() + " " + this.lastName();
}, this);
Simon Bergot
fuente
MVVM es un patrón para separar la preocupación de la presentación del dominio. Los marcos reactivos son herramientas que pueden usarse para lograr este patrón de separación. No son exclusivos
AlexFoxGill
@AlexG Bueno, hay herramientas que coordinan la comunicación entre un modelo de vista y la interfaz de usuario. Llamaría a esos marcos MVVM.
Simon Bergot
El punto es claro : KnockoutJS utiliza un marco reactivo para permitir la separación MVVM de las preocupaciones. AngularJS utiliza la verificación sucia para habilitar MVVM. Son solo formas diferentes de lograr el patrón. Quizás su pregunta es "¿Qué logra el paradigma reactivo en un marco MVVM que la técnica de verificación sucia no logra?"
AlexFoxGill
@AlexG, ¿diría que es un detalle de implementación? Creo que responde mi pregunta.
Simon Bergot
@Simon: No lo calificaría como un detalle de implementación, sino más bien como diferentes enfoques de comunicar los cambios en el Modelo hasta ViewModel
Bart van Ingen Schenau

Respuestas:

9

Esos son conceptos diferentes que no compiten y pueden trabajar fácilmente juntos para producir un gran resultado.

En términos simples:

MVVM es útil para alejarse del desorden de código subyacente (GUI / acoplamiento de modelo). El enfoque reactivo es útil para reducir el desorden de eventos / devolución de llamada.

Recomendaría aprender un poco sobre XAML / WPF ya que Microsoft es el inventor original de MVVM. Microsoft también produjo una muy buena implementación del enfoque reactivo: Extensiones reactivas.

Aquí hay un intento decente de combinarlos:

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

Pregunta SO relacionada:

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

Guarida
fuente