Reaktive Programmierung im Vergleich zum MVVM-Muster zur Verwaltung von GUI-Updates

10

Reaktive Programmierung und MVVM sind zwei Ansätze, mit denen das Problem der Trennung der Domänenschicht von der Benutzeroberfläche behoben werden kann.

  • MVVM definiert dazu ein Ansichtsmodell, bei dem es sich um eine Datenstruktur handelt, die UI-Komponenten zugeordnet ist. Die Benutzeroberfläche zeigt die Daten an und aktualisiert sie möglicherweise, wenn ein Benutzer auftritt.
  • Ein reaktives Framework definiert ein Diagramm von Observablen, die die Benutzeroberfläche darüber informieren, dass sich einige Daten geändert haben

Reaktive Frameworks gewinnen sowohl auf Mainstream-Plattformen (mit Rx in .net & java, react.js) als auch an experimentelleren Orten (FRP in haskell) an Bedeutung.

Ich habe hauptsächlich MVVM mit Winkel verwendet und finde das Verhältnis von Einfachheit zu Ausdruckskraft ziemlich zufriedenstellend, obwohl ich nur an kleinen / mittleren Projekten damit gearbeitet habe.

Was kauft ein reaktives Framework dem Entwickler, was mvvm nicht tut?

Gibt es wirklich einen Unterschied? Beispielsweise wird knockout.js als mvvm-Framework beworben, hat jedoch ein reaktives Gefühl in der Benutzeroberfläche:

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

this.fullName = ko.computed(function() {
    return this.firstName() + " " + this.lastName();
}, this);
Simon Bergot
quelle
MVVM ist ein Muster , um das Anliegen der Präsentation von der Domäne zu trennen. Reaktive Gerüste sind Werkzeuge , mit denen dieses Trennmuster erreicht werden kann. Sie sind nicht exklusiv.
AlexFoxGill
@AlexG Nun, es gibt Tools, die die Kommunikation zwischen einem Ansichtsmodell und der Benutzeroberfläche koordinieren. Ich würde diese MVVM-Frameworks nennen.
Simon Bergot
Der Punkt steht fest - KnockoutJS verwendet ein reaktives Framework , um die MVVM-Trennung von Bedenken zu ermöglichen. AngularJS verwendet Dirty-Checking , um MVVM zu aktivieren. Sie sind nur verschiedene Wege, um das Muster zu erreichen. Vielleicht lautet Ihre Frage: "Was erreicht das reaktive Paradigma in einem MVVM-Framework, das die Dirty-Checking-Technik nicht bietet?"
AlexFoxGill
@AlexG Sie würden also sagen, es ist ein Implementierungsdetail? Ich denke, es beantwortet meine Frage.
Simon Bergot
@ Simon: Ich würde es nicht als Implementierungsdetail qualifizieren, sondern eher als unterschiedliche Ansätze zur Kommunikation von Änderungen im Modell bis zum ViewModel
Bart van Ingen Schenau

Antworten:

9

Dies sind verschiedene nicht konkurrierende Konzepte, und sie können leicht zusammenarbeiten, um ein großartiges Ergebnis zu erzielen.

In Laienbegriffen:

MVVM ist nützlich, um dem Durcheinander von Codebehind (GUI / Modellkopplung) zu entkommen. Ein reaktiver Ansatz ist nützlich, um die Ereignis- / Rückruf-Unordnung zu verringern.

Ich würde empfehlen, etwas über XAML / WPF zu lernen, da Microsoft der ursprüngliche Erfinder der MVVM ist. Microsoft hat auch eine sehr gute Implementierung des reaktiven Ansatzes erstellt: Reactive Extensions.

Hier ist ein anständiger Versuch, sie zu kombinieren:

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

Verwandte SO-Frage:

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

Den
quelle