Основной мотивацией для DTO является представление интерфейса, предназначенного для другого уровня (обычно уровня представления). Например, экран ввода данных может нуждаться в некоторых битах данных из объекта User в дополнение к некоторым битам из Order и т. Д. В этом случае домен в DTO должен происходить на уровне, который вызывает уровень представления, то есть обычно слой "обслуживания".
Существуют такие библиотеки, как Dozer , которые автоматизируют основную работу по конвертации между моделями доменов и DTO.
Ключевым моментом является то, что DTO предназначены для абстрагирования данных (а не бизнес-логики) от более богатых объектов модели домена - следовательно, DTO должны быть преобразованы обратно в объекты домена как можно раньше (на уровне обслуживания), поэтому остальные уровни вашего приложения могут работать с более богатыми объектами домена (данные и бизнес-логика)