Ваш слой валидации больше самой бизнес-логики
Ручная валидация раздувает codebase и всё равно пропускает крайние случаи. Вот как обеспечить runtime contracts с помощью декларативных схем, которые не мешают.
Каждый раз, когда ваш API получает запрос, вы его валидируете. Каждый раз, когда функция получает аргумент из внешней системы, вы его проверяете. Делайте это…