#validation #asp.net-mvc-3 #business-logic
#проверка #asp.net-mvc-3 #бизнес-логика
Вопрос:
Я использую MVC3 для своего приложения, и у меня есть вопрос о проверке. У меня есть уровень бизнес-логики, который отделен от моего веб-уровня, где у меня будет функция, подобная CreateUser, которая создает нового пользователя для использования приложением. Я хочу, чтобы эта функция была доступна в двух местах: 1) Где-нибудь в контроллере, который ее использует, и 2) в программе «Установочные данные», которая вставляет данные в систему.
Я хочу использовать такие вещи, как ModelState.IsValid
для проверки всех базовых проверок, но это не поможет мне в моем режиме Setup Data (или любом другом режиме, который не проходит через MVC). Есть ли какой-либо способ, которым я все еще могу использовать этот код, но содержать всю проверку на моем уровне BusinessLogic, а не в контроллере, без того, чтобы уровень BusinessLogic полагался на MVC?
Спасибо.
Ответ №1:
Похоже, в этой статье об уровнях обслуживания есть то, что мне нужно. Другие предложения по-прежнему приветствуются. Спасибо.
Ответ №2:
Обратите внимание, что статья об уровнях обслуживания по-прежнему означает, что вам нужна зависимость от сборки MVC. Недавно, немного поразмыслив над этим, я пришел к мнению, что сохранение вещей как можно более раздельными — это хороший дизайн. В моей сборке модели у меня есть папка services, в которой, скажем, с помощью процедуры Create () я проверяю и генерирую пользовательские исключения.
Уровень обслуживания не заботится о том, кто или как использует эти исключения. В вашем приложении MVC сопоставьте их с коллекциями ошибок состояния модели или чем-то еще. Ваш дизайн тем более надежен, что ваша сборка модели не зависит от какого-либо участника проверки, который надлежащим образом использует атрибуты проверки MVC, коллекции и т.д.
Я также заметил, что в статье упоминается репозиторий. Я знаю, что в наши дни это в моде, но если вы уже используете ORM-подобную Entity Framework, репозиторий — это на самом деле просто DAO. Повторное использование — это новый синглтон.
Комментарии:
1. далее в статье он абстрагируется от MVC, так что уровень сервиса просто принимает интерфейс, поэтому он напрямую не привязан к MVC (если я правильно его читаю).
2. Вы абсолютно правильно это читаете. Я не дочитал до конца, прежде чем оставить свой комментарий (должен признать, что это обычная личная ошибка). Просто убедитесь, что у вас не получится набор однострочных сервисов.