Таким образом, у меня есть соотношение просмотров к моделям почти 1: 1, и кажется, что все идет хорошо. Если я правильно понимаю их назначение, кажется, что модели представлений должны
- "Урезать" модели сущностей, чтобы на уровень представления передавались только соответствующие свойства
- Добавить дополнительную информацию, необходимую для представления, такую как список сокращений штатов или типов контактов при создании, скажем, адреса.
Пытаясь придерживаться этих принципов, я немного ударил стену своим контроллером отчетов. Различные отчеты, которые создаются для клиента, требуют доступа к примерно 30 различным свойствам. Таким образом, моя модель представления выглядит очень похожей на мою модель Entity.
Конечно, самое простое решение - просто передать модель Entity в представление, чтобы у меня был доступ ко всем свойствам, однако мне также нужно иметь возможность создавать отчеты для пустых или «неполных» клиентов. Это приводит к тому, что при попытке доступа к свойствам навигации в моих моделях сущностей возникают проблемы со ссылками на ноль.
Таким образом, я могу либо использовать нулевую проверку практически для каждого поля в представлении, что не кажется слишком привлекательным ... ИЛИ Я мог бы реализовать модель представления, чтобы избежать исключений нулевой ссылки. Проблема в том, что я получу модель представления, которая выглядит следующим образом:
var customer = customersRepository.GetCustomer(id);
var viewModel = new CustomersViewModel()
{
FirstName = customer.FirstName,
LastName = customer.LastName,
Address = customer.MailingAddress.Address,
City = customer.MailingAddress.City,
// and on and on for about 30 different properties
};
return View(viewModel);
Распечатка всех этих свойств - одна из тех вещей, которая кажется неправильной. Мне не хватает более элегантного решения этой проблемы?