Проверка должна быть на уровне домена.В приложении DDD доменный (бизнес) уровень должен владеть проверкой, поскольку он знает о себе больше всего.Уровень обслуживания работает на домене и должен обрабатывать ошибки, в том числе ошибки проверки, возникающие на уровне домена.Обработка ошибки в этом случае может означать оборачивание ее в исключение уровня обслуживания и возврат кода ошибки, запись ошибки и т. Д. Авторизация также должна быть ответственностью уровня обслуживания.Это не означает, что уровень представления (ASP.NET MVC) не должен выполнять проверку или проверку авторизации.Проверка на уровне представления, как правило, является более легкой, чем проверка на уровне домена и службы, и выполняется для улучшения взаимодействия с пользователем.В конце концов, если большая часть проверки может быть выполнена на стороне клиента, почему бы не сделать это и сохранить поездку на уровень обслуживания?Та же логика применяется для авторизации.
В отношении дублирования логики проверки не существует решения, которое бы удовлетворяло всем случаям, и иногда вам приходится принимать небольшое дублирование, чтобы уменьшить общую сложность и улучшить удобство обслуживания.Самым простым способом проверки на уровне домена является использование стандартных средств защиты и создание экземпляров ArgumentException.В ASP.NET MVC самый простой способ проверки - использование атрибутов аннотаций данных.Часто бывает проще до некоторой степени дублировать логику проверки, чем реализовать всеобъемлющую систему проверки.Кроме того, может иметь место проверка, которая может быть выполнена только на уровне домена, что является еще одним аргументом для их разделения.
Авторизация на уровне сервиса может быть осуществлена разными способами и зависит от используемой базовой технологии.При использовании WCF существует множество рекомендаций для выполнения авторизации.