Я пытаюсь выяснить, где поставить проверку в моем приложении N-Tier Asp.net MVC
С одной стороны, мне кажется, что проверка должна проводиться на бизнес-уровне с самими бизнес-объектами. Это означает, что когда меняются правила валидации, мне нужно изменить их только в одном месте (например, сейчас отображаемые имена пользователей могут быть любыми, но теперь я хочу, чтобы имена были минимум 5 символов и не содержали символов). Это упрощает понимание того, где найти правила проверки, и упрощает поддержание согласованности правил проверки для всех процессов.
С другой стороны, я также чувствую, что проверка должна быть на моделях представления, потому что иногда вам требуется проверка для данных конкретного процесса, которые не потребуются для бизнес-объекта. Например, когда пользователь меняет свой пароль, вы хотите, чтобы он дважды вводил свой пароль в форме, чтобы он не ошибся в своем пароле и не смог войти в систему. Бизнес-объекту User не нужны два поля пароля, потому что это не имеет смысла, поскольку вам нужно только два пароля при смене текущего пароля (или создании новой учетной записи). Поэтому для меня имеет смысл поставить валидацию на модели представлений, чтобы убедиться, что валидация выполняется для конкретного процесса. Недостатком этого является то, что теперь, когда правила проверки меняются, у вас появляется МНОГИЕ места, которые необходимо обновить (вы должны изменить правила для каждой модели представления, имеющей дело с пользователями).
Третий вариант - разделить проверку между вашими бизнес-объектами и просмотреть модели там, где это имеет смысл. Проблема в том, что мне трудно понять, срабатывает ли правило проверки из-за ошибки проверки модели представления или ошибки проверки бизнес-объекта.