Объекты, которые используются для связывания со слоями представления, обычно называются моделями представления, и они DTO предназначены для отображения данных, сопоставленных с объектами домена, и последующего отображения пользовательского ввода обратно в объекты домена.Модели представлений обычно выглядят очень похожими на объекты домена, которые они представляют, однако есть некоторые важные различия:
Данные из объектов домена могут быть сведены или иным образом преобразованы в соответствии с требованиями данного представления,Управлять отображением в простых объектах проще, чем отображать в структуре представления, такой как MVC.Проще отлаживать и обнаруживать ошибки.
Для данного представления могут потребоваться данные из нескольких объектов домена - не может быть одного объекта домена, который соответствует требованиям представления.Модель представления может быть заполнена несколькими объектами домена.
Модель представления обычно разрабатывается с учетом конкретной структуры представления и, как таковая, может использовать специфические для этой среды атрибуты для привязки и проверки на стороне клиента.,Как вы заявили, типичное требование - это конструктор без параметров, который подходит для модели представления.Опять же, гораздо проще тестировать и управлять моделью представления, чем какой-то сложный механизм отображения.
Представления моделей, по-видимому, нарушают принцип СУХОГО, однако после более пристального взгляда ответственностьмодель представления отличается, поэтому с учетом принципа единой ответственности 1020 * целесообразно иметь два класса.Также обратите внимание на эту статью, в которой обсуждается ошибка повторного использования, часто приводимая по принципу DRY.
Более того, модели представлений действительно анемичны, хотя в них может быть конструктор, принимающий объект домена.в качестве параметра и способа создания и обновления объекта домена с использованием значений в модели представления в качестве входных данных.По своему опыту я обнаружил, что хорошей практикой является создание класса модели представления для каждой сущности домена, которая будет отображаться на уровне представления.Управлять двойной иерархией классов доменных объектов и моделей представлений легче, чем управлять сложными механизмами сопоставления.
Обратите также внимание, что существуют библиотеки, которые пытаются упростить сопоставление между моделями представления и объектами домена дляпример AutoMapper для .NET Framework.