Khi phát triển ứng dụng ASP.NET MVC cho phép mô hình được cập nhật, bạn cần một số cách để biết cách lấy mô hình khung nhìn được cập nhật và khớp nó lại với mô hình hiện được cập nhật. Dường như có một vài cách khác nhau để làm điều này và tôi tự hỏi liệu có bất kỳ cách nào trong số này không phải là MVC đúng không (giống như việc bộ điều khiển của bạn lưu trữ dữ liệu trong mô hình không phải là MVC phù hợp)?
Tất cả các kiểu xem đều có ID: Ưu điểm
- Luôn đảm bảo bạn có thể phù hợp với mô hình của bạn.
Nhược điểm
- Bạn phải thực sự cẩn thận rằng không có ID nào bị thay đổi nếu bạn có thể có người dùng cập nhật các hàng mà họ không nên truy cập.
Chỉ các mô hình chế độ xem tối thiểu mới có ID: Ưu điểm
- Ít kiểm tra cần thiết hơn để tránh người dùng cập nhật dữ liệu họ không nên truy cập.
Nhược điểm
- Khó khăn hơn nhiều để theo dõi mô hình xem phù hợp với mô hình nào.
- Bạn vẫn phải kiểm tra một vài kiểu xem có ID để đảm bảo người dùng không cập nhật dữ liệu mà họ không nên truy cập.
Không có mô hình xem có ID:
Ưu
- Không cần kiểm tra ID để cập nhật.
Nhược điểm
- Bạn phải từ bỏ trạng thái không quốc tịch.
Vì vậy, tôi có hai câu hỏi.
Đầu tiên, có một lựa chọn đúng / không chính xác? (Nếu không, điều đó có nghĩa là sự lựa chọn là vấn đề quan điểm và ý kiến câu hỏi thứ hai của tôi dựa trên và nên được bỏ qua.)
Thứ hai, nếu có một lựa chọn đúng / không chính xác, đó là gì?
Để làm rõ về một bình luận, tôi đang nói khi bạn có một mô hình khung nhìn giống với đối tượng cơ sở dữ liệu của bạn.
Nghĩ này:
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?
}
không phải cái này:
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.
- Bạn vừa đưa ra lựa chọn sử dụng MVC vô nghĩa.