モデルの更新を可能にするASP.NET MVCアプリケーションを開発する場合、更新されたビューモデルを取得して、現在更新されているモデルに戻す方法を知るための何らかの方法が必要です。これを行うにはいくつかの異なる方法があるようですが、これらのいずれかが適切なMVCではないのではないかと思っています(モデル内にあるはずのコントローラーストアデータが適切なMVCではないように)。
すべてのビューモデルにはIDがあります:長所
短所
最小限のビューモデルのみにIDがあります:長所
短所
IDを持つビューモデルはありません:
長所
短所
だから私は2つの質問があります。
まず、正しい/間違った選択はありますか? (そうでない場合、それは選択が意見の問題であり、私の2番目の質問の意見に基づいており、無視する必要があることを意味します。)
第二に、正しい/正しくない選択がある場合、それはどれですか?
コメントを明確にするために、データベースオブジェクトを模倣したビューモデルがある場合について話しています。
これを考えてください:
public class InvoiceViewModel //Does not have ID, does not relate to model.
{
public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model.
public AddressViewModel BillingAddressVM { get; set; } //Ditto
public AddressViewModel ShippingAddressVM { get; set; } //Ditto
public List<InvoiceLineItemViewModel> ItemVMs { get; set; } //Each one has an ID?
}
これではない:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
ViewModelオブジェクトは、通常、データベーステーブルに格納されるものではありません。 保存されるのは、ViewModelオブジェクト内の個々のアイテムです。これらの各アイテムには既にIDがあります。
例えば:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
データベースにはInvoiceViewModelに対応する単一のテーブルがないため、InvoiceViewModelオブジェクトのIDはありません。
もちろん、この特定のViewModelのIDとしてInvoiceIDをいつでも使用できます。 InvoiceIDは、このオブジェクトが最終的に表現するものであるため、便利です。しかし、データベース内の特定のIDに対応しないViewModelオブジェクトがあることがわかりました。