Bestpractice - Смешивание модели представления с моделью домена

Разумно ли смешивать модели представления с моделями предметной области?

Таким образом, объект модели представления содержит некоторые объекты модели предметной области (а не наоборот!)


person Rookian    schedule 22.06.2010    source источник


Ответы (2)


Как правило, вам нужно будет ссылаться на свои модели домена в своих моделях просмотра или, по крайней мере, загрузить модели домена в контроллеры и передать информацию в свою модель просмотра.

Я предпочитаю, чтобы контроллеры и представления были как можно более простыми / тупыми, потому что и модели домена, и модели представления намного легче тестировать.

Итак, я часто ссылаюсь на свои модели предметной области внутри своих моделей представления. Иногда я использую агрегацию, иногда просто копирую свойства (в некоторых проектах только с простым старым кодом, в других проектах с использованием автоматического сопоставления)

person CubanX    schedule 22.06.2010
comment
но это разумно и работает нормально только тогда, когда ваша модель предметной области хорошо соответствует потребностям представления. Я слышал, что модель представления должна содержать только почти сформированные строковые свойства. Кстати, вам НЕ нужно копировать свойства. Предлагаю вам прочитать об AutoMapper, просто погуглите! Это отличный инструмент, имхо. - person Rookian; 22.06.2010
comment
Заметьте, я сказал, что в некоторых проектах я копирую, в других я использую автоматический картограф, в частности AutoMapper :) Кроме того, я делаю в основном то, что вы описываете. Я НЕ использую свои модели предметной области в качестве моделей представления. Мы делали это раньше, и это несколько раз нас кусало. - person CubanX; 22.06.2010
comment
Насколько я понимаю, вы смешиваете объекты модели представления и объекты модели предметной области. И вы отправляете оба (т.е. совокупность, содержащую объект модели представления и объект модели предметной области) в представление? - person Rookian; 22.06.2010
comment
В основном да. Модель представления создана для точного обслуживания представления. Иногда я отправляю весь объект домена, иногда я отправляю только те биты, которые необходимы View. Все, что кажется наиболее разумным с учетом требований Точки зрения. - person CubanX; 23.06.2010
comment
В порядке. Ваш подход нарушает правило разделения проблем? - person Rookian; 23.06.2010
comment
Я бы предположил в чистом смысле слова, да. Но в какой-то момент вам нужно передать данные модели предметной области данным модели представления. Так что где-то они должны знать друг о друге :) Я бы предположил, что для 100% чистоты вы захотите сделать все это в Контроллере, но для меня на этом пути лежало безумие :) - person CubanX; 23.06.2010
comment
Я согласен с @Rookian, модель просмотра не должна содержать ссылку на модель предметной области, это не является частью его ответственности и не должно изменяться в случае изменения модели предметной области. Ваш контроллер должен вызвать автоматическое сопоставление или какой-либо метод расширения, который будет отображать модель предметной области в модель простого представления. - person BornToCode; 25.11.2015

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

person Robin Robinson    schedule 22.06.2010
comment
Не могли бы вы объяснить более подробно, почему вы НЕ должны смешивать объекты модели представления с объектами модели предметной области? Плюсы и минусы ... - person Rookian; 22.06.2010
comment
В моих классах модели предметной области обычно есть много методов мутатора состояния. Я не хочу открывать их непосредственно на уровне представления просто для предотвращения путаницы в том, откуда следует вызывать эти методы. Я требую, чтобы все мои доменные команды проходили через уровень обслуживания, который подключает соответствующие сеансы БД, проверки безопасности и т. Д. Однако я обычно ДОЛЖЕН предоставлять объекты значений из моего домена прямо на уровень MVC. Кроме того, четкое разделение между моделями чтения и записи (CQS) помогает организовать это. - person Ryan; 23.06.2010
comment
Я пытаюсь сделать так, чтобы у меня была модель представления для каждого представления, и эта модель представления имела все необходимое для создания представления. Эта модель представления может состоять из нескольких моделей предметной области и использовать только некоторые поля каждой из них. - person Robin Robinson; 29.06.2010