2

この記事を読んでいるように: http://www.codeproject.com/Articles/42830/Model-View-Controller-Model-View-Presenter-and-Mod、MVC は次のように説明されました。

View-Model-Controller UML ダイアグラム

この図では、View-Model はオブザーバー パターンであり、Model の変更は View のUpdateメソッドに通知して View の状態を更新し、現在の状態をこれらの View に渡します。

ビューとコントローラーの間の関係は、ビューが具体的なコントローラーを取得し、戦略パターンで定義されているようにコントローラーでアルゴリズムを実行する戦略パターンで定義されます。

そのため、コントローラーはモデルを更新し、モデルはビューに状態を更新するよう通知します。

ただし、何らかの理由で、コントローラーがモデルにアクセスしてこれらのモデルをビューに渡すため、Asp.Net MVC の同じロジックを視覚化できませんでしたが、ビューはモデルを直接使用してプロパティを取得するなど、状態を更新しますが、できませんでしたAsp.Net MVC のビューとモデルの間のオブザーバー パターンに適合します。

誰かが私が見逃していることを説明してもらえますか?

4

1 に答える 1

5

ASP.NET MVC は Web のステートレスな性質を保持しているため、ビューがレンダリングされると、モデル オブジェクトのインスタンスへの変更をコントローラーが認識する方法はありません。

これは、Silverlight や WPF などのステートフル プラットフォームとは異なります。それらがステートフルであるという事実により、コントローラー (MVVM を使用している場合は ViewModel) が UI で何が起こっているかを観察し、モデル オブジェクトに変更を加え、それに応じてビュー自体を更新することができます。

ASP.NET MVC では、データがコントローラーからビューに渡されるとき、それは一方向の旅です。View.Update() メソッドに相当するものはありません。ビューは一度レンダリングされ、それで終わりです。Controller.AlgorithmInterface に従って、ビューがコントローラーにコールバックする方法もありません。AJAX コールバックで同様のことを実現できますが、バックグラウンドで魔法を使ってコントローラーに状態データを再設定する必要があります (たとえば、ビューからコントローラーにオブジェクト ID を渡すなど)。

于 2012-04-22T05:10:11.250 に答える