Проверка данных должна выполняться в следующих местах в веб-приложении:
- Клиентская сторона: браузер. Чтобы ускорить отчет об ошибках пользователя
- Серверная сторона: контроллер. Чтобы проверить, является ли вход пользователя синтаксически действительным (без инъекций sql, например, допустимого формата для всех переданных в полях, все обязательные поля заполняются и т.д.).
- Серверная сторона: модель (доменный уровень). Чтобы проверить, действительно ли вход пользователя действителен (не дублирует имена пользователей, баланс аккаунта не является отрицательным и т.д.).
В настоящее время я являюсь поклонником DDD, поэтому у меня есть слои пользовательского интерфейса и домена, разделенные в моих приложениях.
Я также пытаюсь следовать правилу, эта модель домена никогда не должна содержать недопустимые данные.
Итак, как вы создаете механизм проверки в своем приложении, чтобы ошибки проверки, происходящие в домене, правильно распространялись на клиента? Например, когда модель домена вызывает исключение о дублированном имени пользователя, как правильно привязать это исключение к представленной форме?
Некоторые статьи, которые вдохновили этот вопрос, можно найти здесь: http://verraes.net/2015/02/form-command-model-validation/
Я не видел таких механизмов в известных веб-фреймворках. Первое, что приходит в голову, состоит в том, чтобы сделать модель домена включением имени поля, вызывающего исключение, в данных исключения, а затем на уровне пользовательского интерфейса предоставить карту между полями данных формы и полями данных модели, чтобы правильно отобразить ошибку в этом контексте для пользователя. Является ли этот подход действительным? Это выглядит шатким... Есть ли примеры лучшего дизайна?