Saat mengembangkan aplikasi ASP.NET MVC yang memungkinkan model diperbarui, Anda perlu beberapa cara untuk mengetahui cara mengambil model tampilan yang diperbarui dan mencocokkannya kembali dengan model yang sekarang diperbarui. Tampaknya ada beberapa cara berbeda untuk melakukan ini dan saya bertanya-tanya apakah ada di antara ini yang tidak sesuai dengan MVC (seperti halnya menyimpan data pengontrol Anda yang seharusnya ada dalam model bukan MVC yang tepat)?
Semua Model Tampilan memiliki ID: Pro
- Selalu pastikan Anda dapat mencocokkan dengan model Anda.
Cons
- Anda harus benar-benar berhati-hati karena tidak ada ID yang diubah selain Anda dapat meminta pengguna memperbarui baris yang seharusnya tidak dapat mereka akses.
Hanya model tampilan minimum telanjang yang memiliki ID: Pro
- Pemeriksaan jauh diperlukan untuk menghindari pengguna memperbarui data yang seharusnya tidak mereka akses.
Cons
- Jauh lebih sulit untuk melacak model tampilan apa yang cocok dengan model apa.
- Anda masih harus memeriksa beberapa model tampilan dengan ID untuk memastikan pengguna tidak memperbarui data yang seharusnya tidak mereka akses.
Tidak ada model tampilan yang memiliki ID:
Pro
- Tidak perlu memeriksa ID untuk pembaruan.
Cons
- Anda harus meninggalkan kewarganegaraan.
Jadi saya punya dua pertanyaan.
Pertama, apakah ada pilihan yang benar / salah? (Jika tidak, itu artinya pilihan adalah masalah opini dan pertanyaan saya yang kedua berdasarkan dan harus diabaikan.)
Kedua, jika ada pilihan yang benar / salah, yang mana itu?
Untuk memperjelas komentar, saya berbicara ketika Anda memiliki model tampilan yang meniru objek database Anda.
Pikirkan ini:
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?
}
bukan ini:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
You have to abandon statelessness.
- Anda baru saja membuat pilihan untuk menggunakan MVC pointless.