+1 , тоже считаю что чем меньше времени невалидные данные будут в системе - тем лучше. Базовые вещи, которые можно проверять stateless - должны быть прям на входе - собрал данные в модельку - провалидируй что почта нормальная, пароли достаточной сложности, всякие строки не содержат гадостей и т.д. Провалидировал - передавай модельку следующему слою, если там надо чтобы данные соответствовали тому что лежит базе - уже пора сходить и проверить например, что пользователь с таким адресом уже есть в системе, у него там нужные права и все такое. Передаем в бизнес логику уже валидного принципала с ролью или набором прав. Ну и так далее, каждый уровень наслаивает свои проверки и делает передаваемые данные лучше и чище.
Тут всегда можно "увлечься" и засунуть коннект к бд в валидацию модели, но для этого есть другое правило - слой не должен расширять зону своей ответственности ради дополнительных валидаций, он должен только проверять ту целостность, которая нужна для его собственной корректной работы, а не для корректности получателя данных...
Для меня проверять well-formed email перед вставкой в базу - дико, а то что пользователь с такой почтой еще не существует в таблице - самое то