[英]Three Layered Web Application
是否可以 - 最好的做法 - 使用第二層重定向用戶?
例如:
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");
}
在最后一行,我使用業務/服務邏輯層將用戶重定向到登錄頁面。
這應該在Presentation層中完成嗎?
絕對不。 業務邏輯層應該做出決定,UI層應該進行重定向。 業務層不應該對HttpContext有任何了解,也不應該直接讀取cookie。 將相關信息傳遞到業務層,以便業務層可以做出決策,並將決策傳遞給UI層,以便它可以處理由此產生的決策。
這就是原因......如果從Web服務使用業務層會怎么樣? 業務層如何在該實例中進行重定向? 或者假設它與非Web客戶端一起使用? 重定向在該上下文中沒有意義。 如果您更改了UI圖層,這不應該影響您的業務邏輯層,並且將重定向和cookie讀取混合到業務層中將需要使用所提議的設計。
這取決於您如何定義圖層; 例如,我的“業務邏輯”通常與我試圖解決的問題有關,並且對UI沒有任何了解。 因此它無法進行重定向,因為它無法訪問請求/響應。
就個人而言,我會在UI層執行此操作; 處理諸如守門人和監護人之類的原始交互是UI層的Web應用工作的一部分。 IMO。 例如,通過http模塊,(根據定義)是UI級組件。
我會說你在業務邏輯中這樣做是對的。 表示層不應該做出關於路由的決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.