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