Трехслойное веб-приложение - PullRequest
4 голосов
/ 27 декабря 2008

Это нормально - лучше всего использовать второй слой для перенаправления пользователя?

Например:

public static void ForceLogin()
{
    HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];

    if (cookie != null)
    {
        if (Regex.IsMatch(cookie.Value, "^[0-9]+\\.[a-f0-9]+$"))
        {
            using (EibxDataContext db = new EibxDataContext())
            {
                int count = db.Logins.Count(l => l.Password == cookie.Value);

                if (count == 1)
                {
                    return;
                }
            }
        }
    }

    HttpContext.Current.Response.Redirect("~/Login.aspx");
}

В последней строке я использую логический уровень Business / Service, чтобы перенаправить пользователя на страницу входа.

Должно ли это быть сделано на уровне презентации?

Ответы [ 3 ]

8 голосов
/ 27 декабря 2008

Абсолютно нет. Слой бизнес-логики должен принять решение, уровень пользовательского интерфейса должен сделать перенаправление. Бизнес-уровень не должен ничего знать о HttpContext и не должен непосредственно читать файлы cookie. Передайте соответствующую информацию на бизнес-уровень, чтобы бизнес-уровень мог принять решение, и передайте решение на уровень пользовательского интерфейса, чтобы он мог работать над результирующим решением.

Вот причина ... что если бизнес-уровень используется из веб-службы? Как бизнес-уровень может перенаправить в этом случае? Или предположим, что он используется с не-веб-клиентом? Перенаправление не имеет смысла в этом контексте. Если вы измените свой уровень пользовательского интерфейса, это не должно повлиять на уровень бизнес-логики, и смешивание перенаправлений и чтения файлов cookie с бизнес-уровнем потребует этого в предлагаемом проекте.

5 голосов
/ 27 декабря 2008

Это зависит от того, как вы определяете свои слои; например, моя «бизнес-логика» обычно представляет собой логику, связанную с проблемой, которую я пытаюсь решить, и ничего не знает об интерфейсе пользователя. Поэтому он не может выполнить перенаправление, так как не имеет доступа к запросу / ответу.

Лично я бы сделал это на уровне пользовательского интерфейса; Работа с необработанными взаимодействиями, такими как привратник и хранитель, является частью работы уровня пользовательского интерфейса для веб-приложения. ИМО. Например, через http-модуль, который (по определению) является компонентом уровня пользовательского интерфейса.

0 голосов
/ 27 декабря 2008

Я бы сказал, что вы правильно делаете это в бизнес-логике. Уровень представления не должен принимать решения о маршрутизации.

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