2012-04-17 3 views
0

Я смотрю на руководство, в котором говорится: «Automapper следует использовать для сопоставления модели с моделью просмотра». Почему такое руководство?Карта Модель для просмотра модели

Почему бы просто не иметь модель модели представления? Например, я мог бы постраничный список контактов с моделью представления, как это:

class ContactListPaginatedViewModel { 
    public Contact myContact; //the model object 
    public PageInfo pageInfo; 
} 

Даже если мне нужно был пост-назад, чтобы обновить контактную информацию - модель связующие будет понять это легко. И если мне нужно, чтобы определенные поля/свойства были опущены из привязки (через пост-обратно или иначе), я могу просто использовать аннотацию Bind с «включениями/исключениями».

Есть ли какая-то более крупная проблема, которую я пропускаю, что предполагает ручной процесс сопоставления (где все свойства модели дублируются на модели представления) желателен?

Лучшее, что я могу представить, это то, что модель может иметь десятки свойств, которые не нужны представлению (или модели представления) ... но даже в этом случае вышеупомянутое руководство по-прежнему не имеет смысла.

Insights?

ответ

1

Обычно, если у вас есть класс dto, лучше всего представить модель View только с теми свойствами, которые вам нужны для модели. Это означает, что вы на самом деле указываете свойства для того, что вы на самом деле используете, например, у меня был объект Client с 20 полями, и мне нужны были Id и FullName. Было бы излишним включать весь объект Client в модель, это лучше просто указать свойства, которые вам нужны в этой модели.

Кроме того, с архитектурной точки зрения, действительно ли вы хотите открыть классы DTO для представления? В большинстве случаев какой-то уровень обслуживания используется как промежуточная точка связи между классами DTO и самими представлениями, что, в свою очередь, заполняет модель представления для вас.

0

Потому что это плохая практика отправки ваших данных непосредственно на представление. Для этого есть ряд причин, в том числе соображений безопасности. Но есть и более практические причины, такие как возможность применения атрибутов модели представления (что-то, чего вы не можете сделать, когда ваши сущности автогенерируются, хотя есть способы обойти это, например, с классами друзей).

В целом. Вам нужна модель просмотра, которая соответствует вашему представлению. Эта модель представления должна быть сопоставлена ​​с вашим бизнес-объектом. Независимо от того, отличается ли ваш бизнес-объект от объекта сущности, большая часть серой области, но должно быть определенное различие между моделью представления и бизнес-моделью.

0

Я почти всегда держу ссылку на модель в своих моделях ViewModels. Если мне нужны дополнительные свойства, я просто добавляю их в свою модель просмотра. Это нормально ИМО.

Смежные вопросы