質問

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

現時点では、これを行うためにAutoMapperを使用していますが、うまく機能しています。ただし、必要なパラメーターの数を取得し、ViewModelを生成するViewModelのコンストラクターを持つブログ記事(Rob Cと思います)で確認しました

var RetViewModel = new ViewModel(MyObject);

これは適切な方法のように思われますか?

役に立ちましたか?

解決

「受け入れられた方法」一般的にはあなたに最適な方法です。

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

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

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

個人的には、それを使用したくありません。マップ/「フラット化」するために余分なコードを書く必要があるからです。オブジェクトプロパティ間(コード、IMO、コンストラクターロジックに残した方が良い)。スクリーンキャストの例では、そのコードは通常、膨満感を引き起こす可能性のあるコントローラーのアクションメソッドに配置されます。(スキニーコントローラー/アクションが好きです)

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

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

例:

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

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

他のヒント

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

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

どちらが良いかは言えませんが、どちらもオプションです。個人的には今のところ2番目のスタイルを好みます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top