Обработка сложных сценариев проверки в ASP.NET MVC - PullRequest
1 голос
/ 15 января 2010

Я работаю над GetRuleViolations() методом для моего User класса, но я немного зациклен на чем-то:

Что происходит, когда разные действия требуют разных бизнес-правил?

Моя таблица User содержит следующие столбцы: Id, UserRoleId, Username и Password. Возможны несколько действий с участием User (создание нового пользователя, редактирование пользователя, установка / сброс пароля и вход в систему), и бизнес-правила для каждого из них не всегда одинаковы.

Например, когда пользователи входят в систему, они должны ввести пароль, но когда администраторы создают нового пользователя, ввод пароля даже не вариант. А в случае установки / сброса пароля необходимо ввести пароль дважды , и эти два значения должны быть точно совпадают. Каков наилучший способ справиться с этой сложностью? Существует ли какой-то шаблон проектирования, позволяющий выбрать правильный метод GetRulesViolations() для подходящего обстоятельства?

Ответы [ 2 ]

0 голосов
/ 15 января 2010

Я обнаружил, что "сервисный уровень" для обработки валидации имеет большой смысл.

Я нашел этот урок очень полезным: http://www.asp.net/learn/mvc/tutorial-38-cs.aspx

Кроме того, похоже, что в MVC 2.0 находятся некоторые приятные улучшения для валидации (см. http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx). Использование UserService или UserValidator должно позволять складывать функции 2.0 без слишком сильно измените дизайн класса.

0 голосов
/ 15 января 2010

Что касается # 1, бизнес-правила не будут существовать в вашей базе данных, они будут существовать в приложении, будь то на уровне домена, отдельном бизнес-уровне и т. Д. ... или прямо в ваших контроллерах, в зависимости от вашего подход.

Вы представите другому вошедшему в систему администратору, создающему пользователя, который отличается от экрана, или представлению, не представленному неаутентифицированному пользователю, создающему учетную запись, верно? HTTP-POST из этого представления будет соответствовать другому действию, которое будет либо напрямую обрабатывать логику, либо делегировать соответствующему объекту (ам). Один метод проверяет предоставленный пароль и либо создает запись для пользователя, либо перенаправляет пользователя на какую-то страницу сбоев (например, «пароли не совпадают» или «имя пользователя уже занято»). Другой метод создаст нового пользователя в базе данных, без вопросов.

Публикация различных представлений для разных действий, соответствующих разным методам, каждый из которых обрабатывает одну конкретную работу / сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...