AngularJS. Как правильнее организовать валидацию полей?
Всем привет!
AngularJS + ASP.NET Web API
Проблема в том, что правила валидации для полей необходимо описывать как на клиенте, так и на сервере. Очевидно возникает сложность поддержки и "синхронизации" валидационной логики между клиент-сервером в условиях развивающегося проекта.
Клиентская валидация форм реализуется с помощью стандартных директив: required, min, max, pattern и т.п. + кастомная логика в своих директивах (зависимости между полями, например).
Нет четкого понимания как придти к оптимальному варианту, который упростит поддержку валидационной логики. В идеале бы иметь структуру, при которой вся логика была бы сосредоточена в одном месте!
Дело в том, что идеологически "серверная" валидация и UX валидация -- разные вещи. UX валидация скорее для увеличения удобства заполнения полей, а серверная валидация для принятия бизнес решения. Часть кода действительно можно совместить, но лично я пишу всегда отдельные логики для фронта и бека. Да, это чуть дольше, но дьявол в мелочах =)
1. Вариант - T4 шабоны, которые будут автоматом генерить js с правилами валидации по вашим моделям. Откручиваете что-то типа ModelMetadataProvider и натравливаете его на свои модели. Ну или таск для Gulp напилить, который будет сканить исходники и по ним генерить. Мы так для локализации делаем. Все resx через T4 перегоняются в js и используются одни и те же ресурсы, без необходимости что-то дублировать.
Может в условиях когда не успеваете одно за другим дотягивать, сделать 2 вещи.
1. оставить минимум клиентской валидации. (тут можно остановится). Да юзерам будет чуть менее удобно, зато не будет нерабочих форм.
2. еще можно в качестве временного костыля, сделать веб-сервис\rest и валидировать на сервере. (только таймауты сделайте, чтоб не каждый юзерский чих дергал такую операцию)