ASP.NET 常見參考專案的 UI、BLL 、Model 、 DAL 分析(轉載CSDN)

wl1121發表於2009-09-23

應用/專案名稱 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.1SDK
(.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:架構清晰

相關文章