В рамках ревью кода для Naris наткнулся на интересную ситуацию:
- есть две структуры: DTO с данными пользователя (login, email, password) и моделька для записи в БД (тот же login, email и password).
- в DTO проставляем валидирующий гуарды для email
- нужно ли проставлять валидирующие гуарды для email в модельке, ведь мы уже сделали проверки при получении DTO
Коротки ответ: да
Потому что модель обрабатывается сервисом, который работает с сущностями БД, а DTO-ку получает контроллер, который взаимодействует с сервисом. Между сервисом и контроллером пролегает архитектурная граница, которая позволяет сервис инжектить куда угодно, соответственно сервис предоставляет интерфейс. Общее правило говорит, что данные требуют валидации при пересечении границы, и не требуют валидации при использовании внутри границ одного модуля/компонента.
И да, в данном случае мы вроде сами контролируем весь поток данных, но любое изменение может легко провести в БД не email, а какой-то другой контакт.
Дублирование проверок в данном случае оправдано.