質問: mvcとmvvmの違いは何ですか? 標準の "model view controller"パターンとmicrosoftのmodel/view/viewmodelパターンに違いはありますか?
回答: 私はmvcとmvvmが同じであると以前考えていました。今フラックスの存在のために私は違いを言うことができます:mvcでは、アプリの各ビューにはモデルとコントローラがあるので、ビュー、モデル、ビューコントローラと呼びます。このパターンは、あるビューが別のビューとどのように通信できるかを教えてくれるわけではありません。したがって、異なるフレームワークでは、それに対する実装が異なります。たとえば、コントローラが互いに通信する実装がありますが、他の実装ではそれらを仲介する別のコンポーネントがあります。ビューモデルが互いに通信する実装もあります。これは、ビューモデルはビューコントローラによってのみアクセスされるべきであるため、mvcパターンの中断です。mvvmでは、各コンポーネントのビューモデルもあります。このパターンは、ビューがどのようにビューモデルに影響を与えるかを指定しないため、通常、ほとんどのフレームワークは単にビューモデルにコントローラの機能を含めます。しかし、mvvmはあなたのビューモデルのデータがモデルから来るべきであるとあなたに伝えます、それは気付かないか特定のビューにカスタムではないモデル全体です。違いを説明するために、フラックスパターンを取りましょう。フラックスパターンは、アプリ内のさまざまなビューが通信する方法を示します。各ビューはストアをリッスンし、ディスパッチャを使用してアクションを起動します。ディスパッチャは今度は、行ったばかりのアクションについてすべてのストアに通知し、ストアは自分自身を更新します。 fluxのストアはmvvmの(一般的な)モデルに対応します。それは特定の見方に慣れているわけではありません。そのため、通常reactとfluxを使うとき、各reactコンポーネントは実際にmvvmパターンを実装します。アクションが発生すると、ビューモデルはディスパッチャを呼び出し、最後にモデルであるストア内の変更に従って更新されます。 mvcではビューモデルを更新できるのはコントローラだけなので、各コンポーネントがmvcを実装しているとは言えません。 mvvmはfluxと一緒に動作することができます(mvvmはビューとビューモデル間の通信を処理し、fluxは異なるビュー間の通信を処理します)が、mvcはfluxを主要な原則を破ることなく処理できません。