GUI更新を管理するためのリアクティブプログラミングとMVVMパターン


10

リアクティブプログラミングとMVVMは、ドメインレイヤーをUIから分離する問題に対処できる2つのアプローチです。

  • MVVMは、UIコンポーネントにマップされたデータ構造であるビューモデルを定義することでこれを行います。UIはデータを表示し、ユーザーが発生したときにデータを更新する場合があります。
  • 反応フレームワークは、データの一部が変更されたことをUIに通知するオブザーバブルのグラフを定義します

リアクティブフレームワークは、主流のプラットフォーム(.netおよびjavaのRx、react.js)とより実験的な場所(haskellのFRP)の両方でマインドシェアを獲得しています。

私は主にangularでMVVMを使用しており、表現力に対するシンプルさの比率は非常に満足できるものだと思います。

リアクティブフレームワークは、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);

MVVMは、プレゼンテーションの懸念をドメインから分離するためのパターンです。リアクティブフレームワークは、この分離パターンを実現するために使用できるツールです。彼らは排他的ではありません。
AlexFoxGill 14

@AlexGさて、ビューモデルとUIの間の通信を調整するツールがあります。私はそれらのMVVMフレームワークを呼び出します。
Simon Bergot 2014

要点は-KnockoutJS はリアクティブフレームワーク使用して、MVVMによる関心の分離を可能にします。AngularJS はダーティチェック使用して MVVMを有効にします。それらはパターンを達成するための異なる方法です。おそらくあなたの質問は、「ダーティチェックテクニックでは実現できない、MVVMフレームワークでのリアクティブパラダイムは何を実現するのでしょうか?」
AlexFoxGill 2014

@AlexGなので、実装の詳細だと言えますか?それは私の質問に答えると思います。
Simon Bergot 2014

@Simon:実装の詳細としては認めませんが、ViewModelまでのモデルの変更を伝えるさまざまなアプローチ
Bart van Ingen Schenau 14

回答:


9

これらは、競合しないさまざまな概念であり、簡単に連携して優れた結果を生み出すことができます。

素人の言葉で:

MVVMは、コードビハインド(GUI /モデル結合)の混乱から逃れるのに役立ちます。リアクティブアプローチは、イベント/コールバックの混乱を減らすのに役立ちます。

MicrosoftはMVVMの最初の発明者なので、XAML / WPFについて少し学ぶことをお勧めします。マイクロソフトは、Reactiveアプローチの非常に優れた実装であるReactive Extensionsも作成しました。

これらを組み合わせるためのまともな試みはここにあります:

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

関連するSOの質問:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.