При разработке приложения ASP.NET MVC, которое позволяет обновлять модель, вам нужно каким-то образом узнать, как взять обновленную модель представления и сопоставить ее с моделью, которая теперь обновлена. Кажется, есть несколько разных способов сделать это, и мне интересно, если какой-либо из них не является правильным MVC (очень похоже на то, что ваш контроллер хранит данные, которые должны быть в модели, не является правильным MVC)?
Все модели просмотра имеют ID: Плюсы
- Всегда убедитесь, что вы можете соответствовать своей модели.
Cons
- Вы должны быть очень осторожны, чтобы ни один из идентификаторов не был изменен, иначе пользователи могут обновлять строки, к которым у них не должно быть доступа.
Идентификатор имеют только модели с минимальным обзором: Плюсы
- Намного меньше нужно проверять, чтобы пользователи не обновляли данные, к которым у них не было доступа.
Cons
- Гораздо сложнее отследить, какой вид модели соответствует какой модели.
- Вам все еще нужно проверить несколько моделей представлений с идентификаторами, чтобы убедиться, что пользователь не обновляет данные, к которым у него не должно быть доступа.
Нет моделей с идентификатором:
Pros
- Нет необходимости проверять идентификаторы на наличие обновлений.
Cons
- Вы должны отказаться от безгражданства.
Итак, у меня есть два вопроса.
Во-первых, есть ли правильный / неправильный выбор? (Если нет, это означает, что выбор - это вопрос мнения, а мой второй вопрос основан на мнении и должен игнорироваться.)
Во-вторых, если есть правильный / неправильный выбор, что это?
Чтобы пояснить комментарий, я говорю, когда у вас есть модель представления, которая имитирует объект вашей базы данных.
Подумай так:
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 бессмысленно.Ответы:
Обычно объект ViewModel не является тем, что хранится в таблице базы данных. Это отдельные элементы в объекте ViewModel, которые сохраняются. У каждого из этих предметов уже есть идентификатор.
Например:
Поскольку в базе данных нет ни одной таблицы, которая бы соответствовала InvoiceViewModel, идентификатор объекта InvoiceViewModel отсутствует.
Конечно, вы всегда можете использовать InvoiceID в качестве идентификатора для этой конкретной ViewModel. InvoiceID удобен, потому что это то, что в конечном итоге представляет этот объект. Но я мог видеть наличие объекта ViewModel, который не соответствует ни одному конкретному идентификатору в базе данных.
источник
По умолчанию у вас должен быть идентификатор, даже если вы его не используете. Создайте столбец в базе данных с именем as
id
и отметьтеauto increment
его, чтобы отсортировать.источник