2

最近のインタビューでこう聞かれました。彼は、Model View と ViewModel のインスタンス化の順序を知りたがっていました。インスタンス化の正確な順序は何でしょうか?

ビューは常に最初にインスタンス化され、次にビューモデルが来て、次にモデルが来ると思いました。私は間違っていましたか??

4

5 に答える 5

6

これは自由回答式の質問です。概念的に見ることができるためです。その場合、頭字語に従います。実際に見ると (特に WPF または WinStore アプリを参照)、少し異なります。

概念的に

アプリケーションのその後のすべての決定は、アプリケーションが動作するように設計されたモデルに基づいているため、最初にモデルをインスタンス化する必要があります。次に、ビュー モデルです。ビューはビュー モデルに依存しており、その逆ではありません。1 つの VM は複数のビューを持つことができますが、通常、1 つのビューに複数のビュー モデルはありません (通常!)。次に、データを表示するビュー。

練習 (WPF および WinStore アプリで)

App クラスが最初にインスタンス化され、VM-M 領域の奇妙な部分に収まります。しかし、これはパターンの範囲外であるため、完全には関係ありません。通常、ビューは最初に作成され、ビジュアル ツリーにアタッチされます。次に、ViewModel がコード ビハインドでインスタンス化され、その時点でモデルが読み込まれます。次に、最初にロードされたすべてのものを表示する大規模な UI の更新が発生します。それ以降は、「概念的に」の部分のすべてが当てはまります。

この質問は、明確な答えがないため、意見が分かれる可能性があります。しかし、これは私が見て、読んで、経験したことです。

于 2013-10-04T18:10:46.053 に答える
0

各レイヤーが単一のクラスである単純なシナリオに限定されているため、質問は少しばかげています。あるビュー モデルが別のビュー モデルを提供するとします。「ビューが最初に来る」と決定した場合、元のビューモデルでその関数を呼び出す前に、別のビューを作成する必要がありますか? 返されたビュー モデルに基づいてビューを選択する必要がある場合はどうなりますか? 逆に、「viewmodel が最初に来る」と決定した場合、ビューからのパラメーター入力に基づいて新しい viewmodel を選択する必要がある場合はどうなりますか?

階層化されたアーキテクチャは依存関係に関するものです。MVVM は、V は VM に依存し、VM は M に依存すると述べています。インスタンス化の順序については何も述べていません。依存関係をコンストラクターに渡す必要がある、つまりインスタンス化の順序が M-VM-V である必要があると判断するかもしれませんが、アプリケーション全体でそのような小さな詳細を強制しようとする実用的な理由は見当たりません。

于 2013-10-04T18:42:11.220 に答える