Чтобы уменьшить дублирование кода и возникающие в результате ошибки, весь код проверки должен находиться на одном уровне, предпочтительно на бизнес-уровне, поскольку он находится в лучшем положении для оценки объекта и определения, является ли он действительным или нет. 1001 *
Однако, хотя это теоретический идеал, он часто не прагматичен в реальных ситуациях. В среде клиент-сервер, такой как ASP.NET, вы хотите дублировать как можно большую часть проверки на стороне клиента, чтобы уменьшить количество обращений к серверу. Кроме того, если у вас есть другие бизнес-процедуры (например, пакетная загрузка), которые касаются вашей таблицы, не проходя через ваш бизнес-объект, вам потребуется также выполнить проверку в базе данных, чтобы предотвратить создание данных мусора.
Для проверки, как в вашем примере, я бы создал три метода проверки для моего бизнес-объекта и три CustomValidators - каждый валидатор вызвал бы соответствующий метод для бизнес-объекта на стороне сервера. Я также хотел бы написать код JavaScript для запуска на стороне клиента, чтобы код на стороне сервера просто существовал для перехвата браузеров, не поддерживающих JavaScript, или вредоносных HTTP-запросов.
Для проверки, которую сложно выполнить в JavaScript (т. Е. Требуется бизнес-объект), я не буду беспокоиться о CustomValidator. Вместо этого эти проверки ждут, пока пользователь не нажмет кнопку отправки, после чего я смогу использовать бизнес-объект для проверки себя и возврата любых ошибок.