6

「キッチンシンク」モデルを使用するのは悪い習慣であるとオンラインで読みました。

ルール #3 – ビューは、ViewModel の設計を指示します。ビューをレンダリングするために必要なものだけがビューモデルと共に渡されます。

Customer オブジェクトに 50 個のプロパティがあり、そのうちの 1 つのコンポーネントにその名前しか表示されない場合は、これら 2 つのプロパティのみを持つカスタム ViewModel タイプを作成します。

しかし、これがいかに優れているかについての Jimmy Bogard のその後の説明は、私に少し疑問を残しました。モデルに顧客のリストだけを含めるのはとても簡単で、POCO を使用することもできます。

これで、サイトのすべてのページにカスタムの小さなビュー モデル フラグメントを作成できるようになりましたか? Customer プロパティを使用するすべてのページは 1 つを取得しますが、たとえば、Age を使用し、Name を使用しないページがある場合など、一部の情報は無関係であるため、もちろん共有できません。2 つの新しいミニ ビュー モデル クラスですよね?

これには非常に時間がかかり、100 万もの小さなカスタム ビュー モデルが作成されるように思われます。

4

3 に答える 3

3

ビュー モデル クラスは、値を転送するだけでなく、モデルで使用されるものとは異なるデータ型 (データ注釈)、検証規則、および関係を定義するためにも使用できます。今私の頭に浮かぶいくつかの利点:

  • ユーザーのパスワードを変更したり、基本データやサブスクリプション設定を変更したりする場合は、さまざまな検証規則があります。これらすべてのルールを 1 つのモデル クラスで定義するのは複雑な場合があります。異なるビュー モデルを使用すると、よりきれいに見えます。
  • ビュー モデルを使用すると、パフォーマンス上の利点も得られます。ユーザーリストを表示したい場合は、IDと名前のみでビューモデルを定義し、インデックスを使用してデータベースから取得できます。オブジェクト全体を取得してビューに渡すと、データベースから必要以上のデータが転送されます。
  • ビュー モデルの表示およびエディター テンプレートを定義し、html ヘルパーを使用して別のページで再利用できます。モデル POCO のテンプレートを定義すると、さらに悪化します。
于 2012-04-25T14:35:09.220 に答える
2

POCO オブジェクトをビュー モデルとして使用すると、基本的にプライベート オブジェクトが表示され、カプセル化が解除されます。これにより、対応するビューを変更せずにモデルを変更することが難しくなります。

データ オブジェクトには、データ アクセス層にのみ適切な詳細が含まれている場合があります。これらのものをビューに公開すると、変更されるとは予想していなかった値が誰かによって変更され、バグが発生する可能性があります。

OO 言語でプライベート メンバーを持つのと同じ理由の多くが、この理由付けに適用されます。そうは言っても、一度しか使用されないこれらすべての「使い捨て」モデルを作成するには多くの余分な作業が必要になるため、依然として非常に頻繁に壊れています。このような種類のモデルを作成するためのフレームワークが存在しますが、名前はわかりませんが、オブジェクトを結び付けて興味深いプロパティのみを選択できるため、特定のビュー モデルを作成する手間が省けます。

于 2012-04-25T14:18:03.933 に答える
0

ビュー モデルは、ビューにデータの表示方法を指示します。モデルを表現しています。モデルを表現する方法が 2 つない限り、ビュー モデルを 2 つ持つ必要はないと思います。2 つのページがあるからといって、データを別の方法で表示するわけではありません。したがって、1 つの再利用可能なビュー モデルにできる場合は、2 つのミニ ビュー モデルを作成する時間を無駄にしません。後でページがある場合を想像してみてください。名前と年齢が必要な場合は、別のビュー モデルを作成しますか? それは絶対にばかげています。ただし、「Age」を表示する 2 つのページがあり、別の方法で表示する必要がある場合は、別のページを作成します。

于 2012-04-25T15:35:57.873 に答える