Вы можете найти полезным this .
И имейте в виду, что валидация живет повсюду. В этом нет ничего плохого, если DTO применяют валидацию пользовательского интерфейса (например, заполнение необходимых полей, дату и время в правильном формате и т. Д.) И объекты домена - валидацию домена (например, на счете есть деньги до операции снятия).
Вы не можете создать универсальную проверку. Лучшее, что вы можете сделать, - положить его в соответствующие места.
И убери это чувство по поводу дублирования. Использование DTO обычно означает применение принципа единой ответственности. Дублирования не будет, если у вас есть 2 объекта заказчика, один из которых отвечает за перенос бизнес-логики, а второй - за ее отображение.