1

MVCを使用し、データをViewModelsに変換する場合、これはこれを行うための一般的な方法ですか?

現在、私はAutoMapperを使用してこれを実行しており、正常に機能しています。ただし、ブログ記事(Rob Cだと思います)で、必要なパラメーターの数を取得してViewModelを生成するViewModelのコンストラクターを確認しました。

例えば var RetViewModel = new ViewModel(MyObject);

これはそれを行うためのまともな方法のように思えます、考え?

4

2 に答える 2

3

「受け入れられた方法」は、一般的にあなたにとって最も効果的な方法です。

AutoMapperのことは聞いたことがありません。調べてみると、特定の規則に従って魔法のオブジェクトマッピングが作成されることがわかりました。

スクリーンキャスト:http ://www.dnrtv.com/default.aspx?showNum = 155

注:私はそのスクリーンキャストの約半分しか見ていなかったので、AutoMapperについての私の考えはやや不完全です。

オブジェクトのプロパティ(コード、IMO、コンストラクターロジックに残しておく方がよい)間でマップ/「フラット化」するための追加のコードを作成する必要があるため、個人的には使用したくありません。スクリーンキャストの例では、そのコードは通常、肥大化につながる可能性のあるコントローラーのアクションメソッドに配置されます(スキニーコントローラー/アクションが好きです)

モデルのコンストラクターにオブジェクトを取得してすべての作業を行わせるという、投稿で指定したメソッドを使用します。

さらに、ViewModelオブジェクトのプロパティ値を手動で設定できるように、パラメーターをとらない空のコンストラクターを常に作成します。

例:

CustomViewModel myModle = new CustomViewModle
{
    Property1 = "Something",
    Property2 = 3,
    //etc..
};

要約すると、両方の方法を試して、何が効果的かを確認してください。AutoMapperは素晴らしいアイデアであり、多くの状況で役立つことがわかりますが、AutoMapperを使用すると、オブジェクトコンストラクターを使用する場合と同じくらい多くのコードを記述できるようになると思います。

于 2009-12-02T00:03:18.190 に答える
1

「公式に推奨される」アプローチは、モデルバインディングメカニズムにそれを処理させることです。これはより単純で、プロセスを自動化します。モデルを初期化できるようにするには、モデルのプロパティを読み取り/書き込みで公開する必要があります。

あなたが話している2番目のオプションは、おそらくモデルを不変オブジェクトにすることの利点を利用するでしょう。つまり、すべてのプロパティを読み取り専用にし、コンストラクターパラメーターを使用してそれらを一度初期化します。これには、FormCollectionを直接調べて、送信された値を引き出す必要があります。それはより多くの作業ですが、防御プログラミングの1つのタイプであるなどの独自の利点があります。

どちらが良いかはわかりませんが、どちらも選択肢です。私は個人的に今のところ2番目のスタイルを好みます。

于 2009-12-01T09:17:21.427 に答える