Какова наилучшая практика для показа объекта или DTO для просмотра в mvc3? - PullRequest
2 голосов
/ 22 марта 2012

Я создал свою собственную индивидуальную архитектуру, включая n-уровневые слои для различных технологий.

В настоящее время работает над n-уровневой архитектурой с фреймворком asp.net mvc. Проблема в том, что у меня есть структура сущностей на уровне доступа к данным. Поскольку у сущностей будут все свои реляционные метаданные и навигационные свойства, они становятся более тяжелыми. Я чувствую, что было бы неразумно выставлять эти объекты прямо через mvc view.

Мне больше нравится выставлять свою индивидуальную модель сущностей поверх mvc, которая будет легче.

Но это также приводит к дополнительным затратам на преобразование данных из моих исходных сущностей в настроенную модель.

Например, у меня есть сущность Employee, сгенерированная из файла edmx инфраструктуры сущностей. Он содержит всего 20 полей со всеми навигационными свойствами.

Теперь для просмотра в mvc мне нужно показать только 2 поля для редактирования.

Так нужно ли нам открывать исходную сущность для просмотра или создавать DTO / настраиваемую модель этих двух полей и чем открывать это представление?

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Я бы использовал модель представления.Я научился не выставлять мои доменные объекты для представления, я скорее сопоставляю свой доменный объект с моделью представления и возвращаю эту модель представления к представлению.

Вот модель частичного представления, у вас может быть больше свойствесли вам нужно больше данных о сотрудниках для создания / редактирования или отображения:

public class EmployeeViewModel
{
     public string FirstName { get; set; }
     public string LastName { get; set; }
}

В моем методе действия моего контроллера это будет выглядеть примерно так:

public ActionResult Edit(int id)
{
     Employee employee = employeeRepository.GetById(id);

     // Mapping can be done here by using something like Auto Mapper, but I am
     // manually mapping it here for display purposes

     EmployeeViewModel viewModel = new EmployeeViewModel();
     viewModel.FirstName = employee.FirstName;
     viewModel.LastName = employee.LastName;

     return View(viewModel);
}

И тогда ваше представление можетвыглядит примерно так:

<td>First Name:</td>
<td>@Html.TextBoxFor(x => x.FirstName, new { maxlength = "15" })
    @Html.ValidationMessageFor(x => x.FirstName)
</td>

Я предпочитаю иметь модель представления, которая имеет только те значения сотрудника, которые необходимы для представления.Допустим, у вашего сотрудника 20 свойств, и вам нужно только обновить 2 поля, зачем тогда передавать все 20 в представление? Используйте только то, что вам нужно.

0 голосов
/ 22 марта 2012

Вы можете разоблачить оригинальную сущность, в этом нет ничего плохого. Но как только вам понадобится другая информация о представлении, например, вместо Имени и Фамилии вам нужно полное имя, тогда вы должны создать EmployeeViewModel только с необходимыми свойствами. Вы инициализируете его нужными значениями в действии, а затем передаете его в представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...