4

私はMVCを初めて使用します。

MVCでビューモデルを処理する3つの方法を詳しく説明したこの短いビットを読みました。

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

その要点は私には次のように思われます。

方法1、データベースからオブジェクトを引き出し、それをビューモデルとして使用します。すばやく簡単ですが、複数のテーブルからのデータが必要な場合は、完全に失敗します(方法2がないと回避方法は考えられません)。

方法2、複数のオブジェクトへの参照を持つクラスを作成し、これをビューモデルとして使用します。このようにして、必要なものすべてにアクセスできます。記事によると、ビューが複雑になると、ドメイン/ビューモデルオブジェクト間のインピーダンス不整合が原因で故障します...これが何を意味するのかわかりません。グーグルインピーダンスの不一致は多くのものを返しました。オブジェクトを使用してデータベースのものを表現しているということの要点であり、ものはきれいにマッピングされませんが、おそらく方法1でもこの問題が発生します。私が何であるかわからないない。また、必要なデータを取得するためにビューごとにクラスを作成することは、メンテナンスの観点からは理想的ではなく、選択肢があるかどうかはわかりません。

方法3、まだ頭を悩ませていますが、ドメインモデルに接続されていないクラスにbool addAdditionalを追加した場合、チェックボックスの例が方法2で機能しない理由がよくわかりません。方法3は、ドメインのものを直接返すのではなく、特に必要なプロパティを引き出すだけだと言っているようです。これは良いと思いますが、そうする大きなコンストラクターが必要になるため、保守が難しくなりthis.x = domain.xますthis.y = domain.y

ビルダー、特にインターフェイスが使用される理由がわかりませんが、引き続き作業を続けます。

編集:私はこれが実際には問題ではないことに気づきました、私の質問は、私の考えは正しいですか?

4

2 に答える 2

1

#2 で遭遇した問題は、次の 2 つのことのいずれかを行う必要があることです。

  • フォーム上のすべてのオブジェクトにすべてのフィールドを含めます。表示されないものは含める必要がありますが、非表示にする必要があります。

  • 必要な特定のフィールドのみを含めますが、AutoMapper などを使用してこれらのフィールドを実際のオブジェクトにマップし直します。

#2 では、自分がやりたいことと、やらなければならないことが一致していません。#3に進むと、この不一致が取り除かれます(私が理解していることから、簡単に見ただけです)。また、方法 2 を使用する際に、特定のハッカーが id フィールドなどの値を送信する可能性があるという問題も修正されます。言い換えれば、非常に注意しない限り、どのオブジェクトでも何でも更新することが可能です。

方法 3 を使用すると、AutoMapper などを使用して、方法 2 によって公開されたセキュリティの問題/インピーダンスを心配することなく、カスタム オブジェクトをデータ ストア オブジェクトにマッピングするという汚い作業を行うことができます (2 のセキュリティ問題の詳細については、コメントを参照してください)。 )。

于 2011-09-21T14:52:31.903 に答える
0

方法 1 と 2 の両方にインピーダンスの不一致が存在することについては、おそらく正しいでしょう。コード内のオブジェクトとリレーショナル マッピングを使用する DB オブジェクトの間で、どこにでも現れます。 Jeff Atwoodがそれについて書いており、この記事を引用しています。この記事は、オブジェクト リレーショナル マッピング、つまり「コンピューター サイエンスのベトナム」を扱うすべてのすばらしい議論です。ほとんどの場合、これらすべてのアプローチの長所と短所を比較検討し、ニーズに最も適していると思われるものを選択してから、間違ったものを選択したことに後で気付くことになります。あるいは、あなたは私よりも幸運で、最初のラウンドで問題を解決できるかもしれません。いずれにせよ、それは毛むくじゃらの問題です。

于 2011-09-21T14:59:32.030 に答える