http://www.tt52.cn/blogview.asp?logID=178&cateID=3
首先我們先來看看組件 Data Access Application Block,它是微軟以原始碼形式提供的一個最佳化的資料訪問組件,你可以去
微軟下載,當然我們也可以在.text的sqlhelper.cs,adohelp.cs,sqlserver.cs三個檔案裡面找到全部代碼,sqlhelper和adohelp都包含
sqlhelper和SqlHelperParameterCache兩個類,sqlhelper用來向資料庫發出各種不同類型的命令,SqlHelperParameterCache負責
參數管理.而sqlserver類是adohelp.cs的虛擬類的實現,我們可以看到adohelp.cs裡面有很多visual的虛擬方法,正是因為這裡用的visual
而非abstract,這些虛擬成員都有預設實現,所以sqlserver類非常簡單。這個目錄下還有幾個其他的檔案,他們的作用我們後面再說。
下面我們以大家比較關心的分類來分析.text的資料訪問流程。
我們知道首頁有分類的顯示,那就看看首頁的分類是怎麼顯示出來的。
開啟aggsite下的Template.ascx(如果不明白為什麼要開啟這個檔案的,請參看入門篇)
可以看到這裡用的是一個SiteMoreCategory使用者控制項,再開啟這個使用者控制項,可以看到它又調用了link類
的GetCategoriesByParentID方法.繼續跟蹤發現又跑到DTOProvider類裡面,DTOProvider只有幾句代碼,但這幾句代碼非常關鍵,
它有一個static的建構函式,static的建構函式的好處在於,當我們調用一個類的靜態成員之前,它會自動執行!
而Instance則返回了一個IDTOProvider介面,這裡返回一個介面是一個非常巧妙的技巧,
就是說只要實現這個介面的類都可以通過這個方法返回,這也是我們在跟蹤很多資料訪問的代碼的時候,
都會有個DTOProvider.Instance().什麼的原因,呵呵.我們看看IDTOProvider裡面有些什麼,哇,好多東西!但都是空架子!
(你少說廢話,不是空的那還叫介面),
我們重點分析建構函式裡面的代碼, DTOProviderConfiguration dtoPC =Config.Settings.BlogProviders.DTOProvider;我考,
這什麼玩意,簡直是亂七八糟!哈哈,不過如果你結合web.config也很好理解,它搞這麼多層實際上也就是從web.config裡面讀取配置
的type="Dottext.Framework.Data.DataDTOProvider"而已.
我們回到IDTOProvider的方法GetCategoriesByParentID,因為DataDTOProvider是實現IDTOProvider介面的,
很自然我們到DataDTOProvider找這個方法的實現代碼,
DbProvider.Instance().GetCategoriesByType(catType,ActiveOnly),這句讓我們又要跑到dbprovider類裡面
在這個類裡面我們看到了與DTOProvider相類似的代碼,我們在web.config裡面找到
type="Dottext.Framework.Data.SqlDataProvider, Dottext.Framework",
怎麼又跑到web.config搞名堂了?
呵呵,聰明的你也許想到什麼,假如orcale公司也有個什麼Data Access Application Block(就算沒有,我們自己也可以寫一個),
那我們另寫一個OrcaleSqlDataProvider調用它,再把web.config
換成 type="Dottext.Framework.Data.OrcaleSqlDataProvider"什麼的,我們
不是就可以訪問orcale資料庫了?非常正確!兜了這麼大的圈子,我們主要的目的就是為了這個,呵呵.
在SqlDataProvider裡面找到GetCategoriesByType的實現代碼,可以看到它通過調用sqlhelper函數的方法,執行blog_GetCategoriesByType
預存程序,完成資料庫的讀取!
最後讓我們來總結一下:
config類
從web.config裡面讀取動態配置資訊(配置也.text是很重要的一部分,有機會另外寫文章與大家一起研究)
IDTOProvider,DTOProvider,DataDTOProvider類 業務層
.text的功能代碼都在這裡實現,介面層(使用者控制項)直接調用這裡的成員就可以了
IDBProvider,DBProvider,SqlDATAProvider類 資料業務層
是業務層和資料訪問層的橋樑,因為這一層的存在,讓我們在使用多種資料來源的時候易如反掌
SqlHelper,ParameterCache類 資料訪問層
前面已經有說明
資料庫的表結構,預存程序什麼的,與其我來猜測,不如等dudu抽空給大家整理下吧.