首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

三層架構資料存取流程完整追蹤:Web → BLL → IDAL → Factory → DAL → SQLHelper → Model 往返詳解

     編輯:關於ASP.NET

經典三層架構 (Presentation / BLL / DAL) 配合工廠模式解耦介面與實作。本文以一個具體查詢請求,追蹤完整呼叫鏈路與資料流向。

呼叫鏈路圖解

Web (UI) → BLL (Business Logic) → IDAL (Interface) → Factory (工廠) → DAL (SQL Server 實作) → SQLHelper → Model (Entity)

逐層詳細流程

  1. Web 層:接收請求參數 (如 QueryString "id"),型別轉換驗證,建立 BLL 實例呼叫方法。
  2. BLL 層:業務規則驗證、事務控制、日誌記錄,透過工廠取得 IDAL 介面實例,呼叫資料存取方法。
  3. 工廠層:讀取 web.config 組態字串 (如 DAL=MyApp.DAL.SqlServer.UserDAL),Assembly.Load + CreateInstance 動態建立具體 DAL 物件,回傳 IDAL 介面。
  4. DAL 層 (IDAL 實作):構建 SQL/參數,呼叫 SQLHelper.ExecuteReader 取得 SqlDataReader。
  5. SQLHelper:封裝 SqlConnection、SqlCommand、SqlParameter,執行查詢回傳 SqlDataReader。
  6. 資料映射:DAL 逐行 reader.Read(),將欄位值填入 Model 實體屬性,加入 List<Model> 回傳。
  7. 7. 返回鏈路:Model List → DAL → BLL (業務轉換/篩選) → Web (繫結 GridView/Repeater/JSON 序列化)。

關鍵代碼片段

// Web 層
int userId = Convert.ToInt32(Request["id"]);
UserBLL bll = new UserBLL();
UserInfo user = bll.GetUserById(userId);
lblName.Text = user.Name;

// BLL 層
public UserInfo GetUserById(int id)
{
    IUserDAL dal = DataFactory.CreateUserDAL(); // 工廠
    return dal.GetUserById(id);
}

// 工廠層
public static IUserDAL CreateUserDAL()
{
    string path = ConfigurationManager.AppSettings["UserDALPath"]; // "MyApp.DAL.SqlServer.UserDAL, MyApp.DAL"
    return (IUserDAL)Assembly.Load(path.Split(',')[1]).CreateInstance(path.Split(',')[0]);
}

// DAL 層 (SQL Server 實作)
public UserInfo GetUserById(int id)
{
    string sql = "SELECT * FROM Users WHERE Id=@Id";
    SqlParameter p = new SqlParameter("@Id", id);
    using (SqlDataReader dr = SQLHelper.ExecuteReader(sql, p))
    {
        if (dr.Read())
            return MapToModel(dr);
    }
    return null;
}
private UserInfo MapToModel(SqlDataReader dr)
{
    return new UserInfo { Id = (int)dr["Id"], Name = (string)dr["Name"], Email = (string)dr["Email"] };
}

架構優勢總結

  • 解耦:Web 不依賴具體 DAL,透過介面與工廠切換資料庫 (SQL Server/Oracle/MySQL)。
  • 單一職責:各層專注本職 (UI/業務/資料存取/物件映射/連接管理)。
  • 可測試:BLL 可 Mock IDAL 進行單元測試。
  • 可維護:修改資料庫只動 DAL,修改業務只動 BLL。

雖現代架構傾向 Repository + UnitOfWork + ORM (EF Core/Dapper),但三層核心思想仍是企業級 .NET 系統設計的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved