MVCのViewModelは、ビューのモデルです。通常はプリミティブ型のプロパティバッグです。重複しているように見えるかもしれませんが、コードをデカップリングすることで将来の問題から身を守ります。一例として、
は、ドメインモデルでPersonオブジェクトを与えられた:
public class Person
{
public string FirstName {get; set;} // John
public string LastName {get; set;} // Doe
public DateTime Birthdate {get; set;} // 01/01/1965
}
あなたのビューでは、フルネーム、年齢や誕生日などのビューでこれを表現したいことがあります。 ViewModelは次のようになります。
public class PersonViewModel
{
public string FullName {get; set;} // John Doe
public int Age {get; set;} // 46
public int Birthday {get; set;} // January 1
}
ドメインモデルからビューモデルに変換する必要があります。私は、永続化レイヤーからの投影クエリ、またはAutoMapperのようなオブジェクトからオブジェクトへのマッピングフレームワークのいずれかを使用しました。
このようにデータを構造化することで、ロジックとフォーマットルールをビューマークアップから守ることができます。 AutoMapperなどのフレームワークを使用することで、日付と時刻の文字列書式を標準化し、コンベンションベースのマッピングを行うこともできます。
また、私は一般的にViewごとに1つのViewModelを持つことをお勧めします。 View/ViewModel構造体を共有したり、条件付きビュー情報を適用する必要がある場合は、それらを部分ビューに分割する必要があります。
フォームポストシナリオの処理方法を提案するのに十分親切ですか?私はviewmodelからビジネスモデルに変換するのに苦労しています。Automapper、読んだことは本当に意味がありませんこのシナリオを処理し、これを処理する唯一の論理的な方法は、モデルを構築するためにviewmodelインスタンスを受け取るビジネスモデル内のコンストラクタを提供するか、またはコントローラにコードを書き込むために残しておくことです。何を指示してるんですか? – ignaciofuentes
あなたのコントローラには、あなたのフォーム要素に一致するプロパティを持つパラメータオブジェクトを取る '[HttpPost]'に起因する 'ActionResult'を提供してください。 MVCモデルバインダーは、これらのプロパティーをフォーム要素値で塗りつぶします。そのオブジェクトを持って、それをあなたのサービスに渡す。 (私はこれらのフォームビューモデル、または短いモデルを呼び出しましたが、それはドメインモデルを更新する必要があるだけのDTOです) – codeprogression
サービスでは、正しいプロパティをビジネスモデルへのビューモデル、右?このようなものです。 – ignaciofuentes