Я боролся с этим сам. Есть случаи, когда DTO имеет смысл использовать в настоящее время. Допустим, я хочу показать раскрывающийся список компаний в моей системе, и мне нужен их идентификатор для привязки значения к.
Что ж, вместо загрузки CompanyObject, который может иметь ссылки на подписки или кто знает что еще, я мог бы отправить обратно DTO с именем и идентификатором. Это хорошее применение ИМХО.
Теперь возьмем другой пример. У меня есть объект, представляющий оценку, эта оценка может состоять из рабочей силы, оборудования и т. Д., У него может быть множество вычислений, определенных пользователем, которые берут все эти элементы и суммируют их (каждая оценка может отличаться для разных типов расчетов). Почему я должен моделировать этот объект дважды? Почему я не могу просто сделать так, чтобы мой пользовательский интерфейс перечислял вычисления и отображал их?
Как правило, я не использую DTO для изоляции своего доменного уровня от моего пользовательского интерфейса. Я использую их, чтобы изолировать слой моего домена от границы, которая находится вне моего контроля. Идея, что кто-то поместит навигационную информацию в свой бизнес-объект, просто смешна, не загрязняя ваш бизнес-объект.
Идея, что кто-то положит подтверждение в свой бизнес-объект? Ну, я говорю, что это хорошо. Ваш пользовательский интерфейс не должен нести единоличную ответственность за проверку ваших бизнес-объектов. Ваш бизнес-уровень ДОЛЖЕН выполнить собственную проверку.
Почему вы помещаете код генерации пользовательского интерфейса в объект busienss? В моем случае у меня есть отдельные объекты, которые генерируют код UI отдельно от UI. У меня есть отдельные объекты, которые визуализируют мои бизнес-объекты в Xml. Идея, что вам нужно разделить свои слои, чтобы предотвратить загрязнение такого типа, мне так чужды, потому что зачем вам даже помещать код генерации HTML в бизнес-объект ...
Редактировать
Как я думаю, немного больше, есть случаи, когда информация пользовательского интерфейса может принадлежать на уровне домена. И это может омрачить то, что вы называете доменным слоем, но я работал над мультитенантным приложением, у которого было совершенно другое поведение, как внешний вид и поведение пользовательского интерфейса, так и функциональный рабочий процесс. В зависимости от различных факторов. В этом случае у нас была модель предметной области, которая представляла арендаторов и их конфигурацию. Их конфигурация включала информацию пользовательского интерфейса (например, метки для общих полей).
Если бы мне пришлось создавать свои объекты так, чтобы они были постоянными, нужно ли мне также дублировать объекты? Имейте в виду, что если вы хотите добавить новое поле, у вас есть два места для его добавления. Возможно, это поднимает другой вопрос, если вы используете DDD, все ли домены являются объектами постоянных сущностей? Я знаю, в моем примере они были.