4

2 番目のレイヤーを使用してユーザーをリダイレクトしても問題ありませんか?

例えば:

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");
}

最後の行では、ビジネス/サービス ロジック レイヤーを使用して、ユーザーをログイン ページにリダイレクトします。

これはプレゼンテーション層で行うべきですか?

4

3 に答える 3

8

絶対違う。ビジネス ロジック層が決定を行い、UI 層がリダイレクトを行う必要があります。ビジネス レイヤーは、HttpContext について何も認識してはならず、Cookie を直接読み取るべきでもありません。関連する情報をビジネス レイヤーに渡して、ビジネス レイヤーが決定を下せるようにし、その決定を UI レイヤーに渡して、結果として得られた決定を処理できるようにします。

理由は次のとおりです... ビジネス層が Web サービスから使用される場合はどうなるでしょうか。その場合、ビジネス層はどのようにリダイレクトを行うことができますか? それとも、Web 以外のクライアントで使用されていると思いますか? そのコンテキストでは、リダイレクトは意味がありません。UI レイヤーを変更しても、ビジネス ロジック レイヤーには影響しません。また、リダイレクトとビジネス レイヤーへの Cookie の読み込みを混在させると、提案された設計でそれが必要になります。

于 2008-12-27T17:19:49.890 に答える
5

レイヤーをどのように定義するかによって異なります。たとえば、私の「ビジネス ロジック」は通常、解決しようとしている問題に関連するロジックであり、UI については何も知りません。リクエスト/レスポンスにアクセスできないため、リダイレクトを実行できません。

個人的には、UI レイヤーでこれを行います。ゲートキーパーやカストディアンなどの生のやり取りを処理することは、Web アプリの UI レイヤーの仕事の一部です。IMO。たとえば、(定義上) UI レベルのコンポーネントである http-module を介して。

于 2008-12-27T17:13:57.187 に答える
0

ビジネスロジックでそれを行うのは正しいと思います。プレゼンテーション層は、ルーティングに関する決定を下すべきではありません。

于 2008-12-27T17:09:01.923 に答える