ASP.NET 常見參考項目的 UI、BLL 、Model 、 DAL 分析

應用/項目名稱 UI層實現 Business Model & Logic Layer 實現 Data Access Layer 實現
Personal Web Site Starter Kit 在ASP.NET頁面上直接利用 ObjectDataSource 來綁定 PhotoManager 中的方法來獲取數據、更新數據 兩個數據實體類(Album、Photo),一個管理類(PhotoManager)
自行解決數據庫連接、使用 SqlCommand 來調用存儲過程來完成
Club Web Site Starter Kit 在ASP.NET頁面上直接利用 SqlDataSource 來獲取數據、更新數據 只有一些簡單的 Helper/Utility類,業務邏輯大多在頁面上實現 有一個DataSet,提取 Member表的數據,在自己的數據庫中擴充了 SqlMembershipProvider的字段
Classifieds Site Starter Kit
在ASP.NET頁面上,增/刪/改主要是利用FormView調用BLL中的ModelDB來實現,數據列表主要利用ModelCache的List和ModelDB返回的ModelDataTable來綁定
1) BLL中實現了 ModelDB的類,調用DAL中的DataSet來進行數據更新,如果是查詢數據(GetModelList),則得到 ModelDataComponent.ModelDataTable,這是數據集自動生成代碼中的一個類

2) 在 App_Code 的Web目錄中,主要實現了部分實體在 HTTP Context中的Cache功能,建立了 CachedModel(數據實體類)及其管理對象 ModelCache,後者主要是將BLL層的ModelDB的Retrive結果DataTable轉成 List
全是ASP.NET 2.0 中的DataSet,實現了所有表數據的獲取與更新,它是調用存儲過程來實現的
Commerce Starter Kit 在ASP.NET頁面上,有一些是直接調用 ModelManager對象來完成用戶交互,有一些則是利用 ObjectDataSource 綁定 ModelManager 來達到同樣功能

對於某些操作,如果沒有對應的 ModelManager 則直接使用 SqlDataSource
1) 在Objects目錄下,定義了數據實體類,包含所有屬性的Get/Set方法的定義,沒有實例化方法,而是使用 void Load(IDataReader)來初始化,其中有一個對象(ShoppingCartItems),則繼承至DataTable,利用 BuildDataTable()來進行初始化

2) 利用數個 ModelProvider 將與數據庫的主要交互功能封裝起來,提供了實體層次的CRUD

3) 在 BLL 目錄下,有數個 ModelManager,提供從業務層面對 Model 的操作,其中主要是調用 ModelProvider來完成具體的操作
在 ModelProvider項目中中,先定義ModelProvider抽象類,再由 SqlModelProvider 來繼承,後者中利用 SqlHelper 來完成數據訪問,主要是調用存儲過程
Duwamish 7.1
(.NET 1.1)
調用BusinessFacade中的 OrderSystem 和 ProductSystem 中的方法完成用戶交互,這主要是調用DAL層的相關對象來完成的 1) ModelData,繼承自System.Data.DataSet,在構造函數裏調用BuildDataTables()來初始化一個DataTable用來存儲Model數據

2) 在BusinessFacade和BusinessRule中,實現了與業務邏輯有關的內容,調用數據層的 Models 來完成數據訪問
實現了數個 Models對象,提供了對於 ModelData的CRUD方法,它也是調用 SqlHelper 來完成與數據庫的交互
Jobs Site Starter Kit 利用 ObjectDataSource 綁定 Model 類,Command 主要是調用 Model 的 CRUD方法 在 Model 對象中定義了所有屬性和CRUD方法,實現時調用了 DAL 的 DBAccess 對象,也使用了諸如 SqlParameter 等對象 只有一個類 DBAccess ,屬於工具類,類似於 SqlHelper,它是利用 System.Data.SqlClient 來實現的,如果向其他數據庫移植,代碼量不大
Timer Tracker Starter Kit 利用 ObjectDataSource 綁定 Model 類,Command 主要是調用 Model 的 CRUD方法 在 Model 對象中定義了所有屬性和CRUD方法 DataAccess:抽象類,定義了DAL層需要實現所有 Model 的 CRUD 對應的數據訪問方法

DataAccessHelper:工廠類,利用配置創建相應的 DataAccess 對象

SqlDataAccess:DataAccess 的 SQL Server 實現,其中也包含一些類似於SqlHelper 的通用方法以簡化代碼
.Text 0.95
(.NET 1.1)
大多數是調用 Model有直接調用 SqlDataProvider 來獲取數據、更新數據 在Dottext.Framework 的 Component 中定義了業務實體 Model 和 ModelCollection,在在Dottext.Framework定義了 Models 類,主要用提供 Model 的 CRUD 方法,其中的 R 返回 ModelCollection 在Dottext.Framework 的 Data 中定義了 IDbProvider和 IDTOProvider 接口,然後提供了 DataDTOProvider 和 SqlDbProvider 的實現,其中調用了 SqlHelper 類
Community Server 2.1 SDK
(.NET 1.1 & 2.0)
直接調用 Models 的方法來獲取數據、更新數據等 在 CommunityServerComponents 項目的 Components 中定義 Model 類,其中僅包含屬性定義及構造函數,另外定義了 Models 類,其中實現了 Model 的 CRUD 方法,它是調用 Provider 下的 CommonDataProvider 來完成數據訪問的 在 CommunityServerComponents 項目的 Proivder 中,利用抽象類CommonDataProvider 定義了所有 BLL & Model 層需要的數據訪問方法,然後在 SqlDataProvider 中項目中使用 SqlDataProvider 繼承此類,完成與 SQL Server 數據庫的交互
.Pet Shop 4.0 在 ASP.NET 的頁面上,大多是利用代碼來調用 BLL 層的 Model 對象來獲取數據、更新數據 Model 項目 中定義了所有的業務實體 ModelInfo
BLL 項目中定義業務實體 Model ,其中包含業務視角的 CRUD 方法,它們是調用 IDAL 中的 IModel 的 CRUD 方法來實現的
IDAL 項目中有多個接口定義 IModel,其中定義了需要實現的 Model 的 CRUD 方法
SqlServerDAL 和 OracleDAL 分別在兩種數據庫上實現了 IDAL
DALFactory 爲工廠類,負責根據配置返回相應的 IDAL 的 IModel 實現類
DBUtility 是 SQL Server 和 Oracle 數據庫操作的工具類,主要是 SQLHelper 和 OracleHelper

簡單個人評價:

  1. Personal Web Site Starter Kit:簡單,供初學者參考之用
  2. Club Web Site Starter Kit:對標準 MemberShip 的擴充值得一看
  3. Classifieds Site Starter Kit:結構較爲清晰,利用 DataSet 簡化了大量 SQL 代碼的編寫
  4. Commerce Starter Kit: 利用了 Provider 模型,有些小瑕疵,如界UI層有 SqlDataSource,Model 中有 DataTable
  5. Duwamish 7.1:架構比較清晰,但Model 繼承自 DataSet ,因此其 BuildDataTables 和 Models 中的CURD 方法較爲麻煩,代碼量較大
  6. Jobs Site Starter Kit:簡單實用,有些缺點,如 Model 的 CRUD 方法的 SqlParameter 造成 BLL 和 DAL 無法完全隔離
  7. Timer Tracker Starter Kit:一種架構清晰、較好的實現模式,只是代碼量稍大
  8. .Text 0.95:基於 .NET 1.1 ,因此 BLL 層稍顯複雜,DAL 層代碼量也較大
  9. Community Server 2.1:它同時兼容 .NET 1.1 和 .NET 2.0 ,因此沒有利用 .NET 2.0 的許多特性,但其 Provider 的模式較爲清晰
  10. .Pet Shop 4.0:架構清晰
注:上述分析以數據訪問爲主,本 Post 是使用 Windows Live Write 來編寫完成 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章