Розробляючи додаток ASP.NET MVC, що дозволяє оновити модель, вам потрібен певний спосіб знати, як прийняти оновлену модель перегляду та співставити її з тією моделлю, яка зараз оновлена. Здається, є кілька різних способів зробити це, і мені цікаво, чи будь-який з них не є належним MVC (як, наприклад, дані зберігання даних вашого контролера, які повинні бути в моделі, не належні MVC)?
Усі моделі перегляду мають ідентифікаційний номер: плюси
- Завжди переконайтеся, що ви можете відповідати вашій моделі.
Мінуси
- Ви повинні бути дуже обережними, щоб жоден з ідентифікаторів не був змінений, ви можете мати користувачів, які оновлюють рядки, до яких вони не повинні мати доступу.
Лише моделі з мінімальним переглядом мають ідентифікатор: плюси
- Набагато менше перевірки потрібно, щоб уникнути оновлення даних користувачів, до яких вони не мають доступу.
Мінуси
- Набагато складніше відстежити, які моделі перегляду відповідають тій моделі.
- Ви все ще повинні перевірити кілька моделей перегляду з ідентифікаторами, щоб переконатися, що користувач не оновлює дані, до яких не повинен мати доступ.
Жодна модель перегляду не має ідентифікатора:
Плюси
- Не потрібно перевіряти ідентифікатори на наявність оновлень.
Мінуси
- Ви повинні відмовитися від безгромадянства.
Тож у мене є два питання.
По-перше, чи є правильний / неправильний вибір? (Якщо ні, це означає, що вибір є питанням думки, а на моєму другому питанні, на основі думки, і його слід ігнорувати.)
По-друге, якщо є правильний / неправильний вибір, що це?
Щоб уточнити коментар, я говорю, коли у вас є модель перегляду, яка є імітацією об'єкта вашої бази даних.
Подумайте так:
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; }
}
You have to abandon statelessness.
- Ви щойно зробили вибір використовувати MVC безглуздо.