На вашем месте я бы не использовал модель предметной области в своем уровне представления. Я хотел бы создать модель представления (другой класс), которая будет очень похожа на мою модель предметной области. Затем я использовал бы инструмент автоматического сопоставления для сопоставления моей модели предметной области с моделью представления.
Это очень распространенный сценарий, поэтому, если вы используете Google для моделей "просмотр и домен", вы должны найти все, что вам нужно.
public class User {
[Key]
public int IdUser { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
public class UpdateUserViewModel {
// Original fields
public string Password { get; set; }
public string PasswordConfirmation { get; set;
}
Затем вы можете настроить автоматическое отображение для удаления кода вашей котельной плиты:
public ActionResult ShowUser()
{
var domainModel = new User(); // I'm assuming that properties are set somewhere
var viewModel = new UserViewModel();
Autommaper.Map(domainModel, viewModel);
return View(viewModel);
}
Это очень грубо, но, надеюсь, у вас есть идея.
Обновление 1: **
Как я понял, лучше создать новую модель для каждого вида, а затем сопоставить ее с сущностью
Это не просто лучше, оно обеспечивает лучшее разделение задач, делает ваш код легко тестируемым. Просто взглянув на имя класса, я могу увидеть его назначение (UpdateUserViewModel, RegisterUserViewModel и т. Д.).
Исходные поля в этом классе должны быть Метаданными с проверкой, а это не так?
Под оригинальными полями я имею в виду:
public class UserViewModel{
public string UserName { get; set; }
public string FirstName { get; set; }
}
Эти поля уже находятся в вашем классе User, поэтому я сэкономил свое время, не вводя их снова.
Это изменит мою модель с MVC на MVVM или не из-за того, что у меня все еще есть контроллер?
Я полагаю, что то, что я предложил, все еще является паттерном MVC, а не MVVM.
Об Automaper, используете ли вы github.com/AutoMapper/AutoMapper?
Automapper - это то, что я использовал. Есть несколько инструментов, и они делают то же самое. Попробуйте несколько и найдите тот, который больше всего соответствует вашим требованиям.
Удачи.