Я пытаюсь реализовать стратегию проверки в своем приложении. У меня есть уровень MVC, уровень сервиса, репозиторий и доменные POCOs. Теперь на уровне MVC я использую аннотации данных на своих моделях просмотра для проверки ввода пользователя, что позволяет мне дать пользователю обратную связь. В контроллере я вызываю ModelState.IsValid для проверки ввода перед использованием automapper для настройки объекта домена.
Здесь, где моя беда. Я передаю свой объект домена в Службу, которая должна проверять его против моих бизнес-правил, но как я могу пройти проверки ошибок обратно на контроллер? Примеры, которые я нашел, выполняют одно из следующих действий:
- Выбросьте исключение на уровне сервиса и поймайте в Contoller. Но это кажется неправильным, конечно исключения для исключительных случаев, и мы должны вернуть что-то значимое.
- Используйте ModelStateWrapper и вставьте ModelStateDictionary в Сервис. Но этот метод в конечном счете разворачивается в круговую зависимость (контроллер зависит от сервиса, сервиса зависит от контроллера), и это, кажется, плохой запах кода.
- Добавить метод проверки в POCO. Проблема заключается в том, что бизнес-правило может полагаться на другие объекты POCO, поэтому это должно быть сделано в Службе, которая имеет доступ к необходимым таблицам и объектам.
Есть ли более простой метод, который мне не хватает? Я видел много вопросов относительно этого, но не было конкретного решения, кроме упомянутых выше. Я думаю, что любой метод в службе, который выполняет проверку, может просто передать некоторый объект key/value, который я могу использовать в контроллере, но я не уверен, что эта стратегия может быть проблематичной позже.