教程第一節 創建一個數據訪問層 所述 DAL` 清楚將表示邏輯與資料存取邏輯分離。但 DAL` 無法處理業務規則。例:不希望 Products` 表中標記「停用」產品的「分類編號」或「供應商編號」被更新;可能需應用資歷規則(不希望資歷較淺者管理);常見授權案例(僅特殊權限用戶可刪除產品或變更單價)。
BLL`(Business Logic Layer)可視為 DAL 與表示層間資料交換橋樑,整合業務規則。實際應用中 BLL` 以類別庫形式實作,為簡化專案結構,本教程將 BLL` 實作為 App_Code` 資料夾中一系列類別。圖 1 展示表示層、BLL`、`DAL` 三者結構關係。

圖一:BLL 將表示層與 DAL 隔開了,並且加入了業務規則
BLL` 由 4 類別組成,每類別對應 DAL` 中一 TableAdapter`,從各自 TableAdapter` 取得讀取、插入、修改、刪除方法應用適當業務規則。
為清晰區分 DAL`、`BLL` 類別,在 App_Code` 建立兩子資料夾分別命名 DAL`、`BLL`。方案總管 App_Code` 右鍵選「新增資料夾」建立。建好後將第一節建立型別化資料集(Typed DataSet`)移至 DAL`。
在 BLL` 建立 4 類別檔案。同樣方案總管 BLL` 右鍵選「新增項目」,對話框選類別模板。命名 ProductsBLL`、`CategoriesBLL`、`SuppliersBLL`、`EmployeesBLL`(見圖 2)。

圖二:在 BLL 資料夾中添加 4 個新的類別
注意: 使用 Visual Studio 標準版或以上(非 Visual Web Developer),可用 Class Designer` 視覺化設計類別。詳細資訊參考 Class Designer Blog。
接著為新類別加入方法,簡單包裝第一節 TableAdapter` 方法。目前方法直接使用 DAL` 方法,稍後加入業務邏輯。
ProductsBLL` 需 7 方法:
GetProducts()` — 回傳所有產品GetProductByProductID(productID)` — 回傳指定 ProductID` 產品GetProductsByCategoryID(categoryID)` — 回傳指定分類產品GetProductsBySupplier(supplierID)` — 回傳指定供應商產品AddProduct(...)` — 新增產品資訊回傳新 ProductID`UpdateProduct(...)` — 更新現有產品,恰好更新 1 筆回傳 true 否則 falseDeleteProduct(productID)` — 刪除指定 ProductID` 產品