Programowanie reaktywne a wzorzec MVVM do zarządzania aktualizacjami GUI

11

Programowanie reaktywne i MVVM to dwa podejścia, które mogą rozwiązać problem oddzielenia warstwy domeny od interfejsu użytkownika.

  • MVVM robi to, definiując viewmodel, który jest strukturą danych odwzorowaną na komponenty interfejsu użytkownika. Interfejs użytkownika wyświetla dane i może je zaktualizować, gdy wystąpi użytkownik.
  • reaktywna struktura definiuje wykres obserwowalnych, które powiadamiają interfejs użytkownika o zmianie jakiegoś elementu danych

Reaktywne frameworki zyskują popularność, zarówno na głównych platformach (z Rx w .net i java, reag.js), jak i w bardziej eksperymentalnych miejscach (FRP w haskell).

Używałem głównie MVVM z kątownikiem i uważam stosunek prostoty do ekspresji za całkiem satysfakcjonujący, chociaż pracowałem z nim tylko przy małych / średnich projektach.

Co reaktywne środowisko kupuje programistom, czego nie robi mvvm?

Czy naprawdę jest jakaś różnica? Na przykład knockout.js jest reklamowany jako framework mvvm, ale ma reaktywne działanie w interfejsie:

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

this.fullName = ko.computed(function() {
    return this.firstName() + " " + this.lastName();
}, this);
Simon Bergot
źródło
MVVM jest wzorcem oddzielającym problem prezentacji od domeny. Reaktywne struktury szkieletowe to narzędzia , których można użyć do osiągnięcia tego wzoru separacji. Nie są wyłączne.
AlexFoxGill,
@AlexG Są narzędzia, które koordynują komunikację między viewmodelem a interfejsem użytkownika. Nazwałbym te frameworki MVVM.
Simon Bergot,
Chodzi o to - KnockoutJS wykorzystuje reaktywne ramy, aby umożliwić rozdzielenie obaw MVVM. AngularJS używa Dirty-Checkingu, aby włączyć MVVM. Są to po prostu różne sposoby osiągnięcia wzorca. Być może twoje pytanie brzmi: „Co osiąga paradygmat Reaktywny w środowisku MVVM, czego nie robi technika Dirty-Checking?”
AlexFoxGill,
@AlexG, więc powiedziałbyś, że to szczegół implementacji? Myślę, że to odpowiada na moje pytanie.
Simon Bergot,
@ Simon: Nie kwalifikowałbym go jako szczegół implementacji, ale bardziej jako różne podejścia do komunikowania zmian w modelu aż do ViewModel
Bart van Ingen Schenau,

Odpowiedzi:

10

Są to różne niekonkurencyjne koncepcje i mogą one z łatwością współpracować, aby uzyskać świetny wynik.

W laika:

MVVM przydaje się, aby uciec od bałaganu kodebehind (GUI / model coupling). Reaktywne podejście jest przydatne w celu zmniejszenia bałaganu zdarzenia / wywołania zwrotnego.

Poleciłbym dowiedzieć się trochę o XAML / WPF, ponieważ Microsoft jest oryginalnym wynalazcą MVVM. Microsoft opracował również bardzo dobrą implementację podejścia Reactive: Reactive Extensions.

Oto przyzwoita próba ich połączenia:

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

Powiązane pytanie SO:

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

Legowisko
źródło