剖析 .Net 下的數據訪問層技術(六)
2024-07-10 13:03:38
供稿:網友
u 其它
ø asta
經常在delphi下進行網絡數據庫應用開發或者曾經使用過borland midas技術的朋友,對asta應該不會陌生。
如果說基于ado.net或o/r mapping來實現dal是少林、武當的正宗心法,那asta就有點明教“乾坤大挪移”的味道:將整個dal中的data access幾乎完全扔到了另一個地方(和打回原處稍有區別,但也算另一種挪移j)進行處理!
傳統的dal實現大都是這樣的:
asta則另辟蹊徑,額外加入了一個“中間層”:
一般來說,中間層的引入是為了提高靈活性,減少耦合度,
asta就是利用了這個特性設計出來的。
上圖的一個關鍵點就在于asta client與asta server之間
的那個“網絡連接”,asta技術正是利用了網絡特性,間接地
屏蔽了不同數據庫系統間的差別,使開發人員在設計dal時完
全不用知道database的存在!這種情況有點像瀏覽器,完全不
用知道html頁面是來自于iis還是apache,只需要知道自己
是利用http協議通過網絡來獲得html頁面!
在asta中,瀏覽器就是asta client,html頁面就是asta dataset(與ado.net中的dataset在格式上有區別,此處可以認為是另一種數據庫無關的數據集合表示方式),而iis、apache就是asta提供的不同的asta server(目前支持大部分主流數據庫系統,開發人員也可以撰寫自己的asta server),http協議自然就是asta client與asta server間的通信協議!
從技術上分析,asta架構的目的之一就是利用自己提供的協議來屏蔽不同數據庫系統的網絡通信協議,從而使客戶端(dal)完全擺脫在編寫網絡數據庫應用時的通信難題!
(作者還記得,.net出來前,每次在編寫面向internet 的sql server應用程序時,除了需要配置連接字符串,還要在客戶端特別安裝sql server client network utility以配置internet連接,不說sql server暴露端口引起的安全問題,就是這么一番折騰也讓人夠嗆的j)
在asta下編寫程序非常舒服,只要知道asta server的地址和端口,再提供一定權限的用戶名、口令(asta自帶的認證系統,開發人員也可以撰寫自己的authentication/authorization模塊,甚至直接利用數據庫系統提供的驗證機制),立刻就能得到任何數據庫的任何數據信息!而且,一旦數據庫系統有所變動(如從sql server切換到oracle,但不包括數據庫結構的改動),客戶端根本無須任何修改!
asta技術不足處也是很明顯的:由于引入了在某些情況下
(如一次返回數據量很大時)足以致命的“網絡中間層”,使開
發人員在開發大型應用(尤其是面向internet的企業級應用)時
需要特別小心,畢竟,舒服在某些時候是需要付出一定代價的!
有興趣的朋友不妨去這個網站看看:
http://www.astatech.com
ø .net remoting / webservices
原來不準備將.net remoting / webservies拿出來湊熱鬧,畢竟,這兩種技術不是為dal度身定做的。
無奈,偏偏就是看到有朋友這么用過,后來細想,發現也頗有一些道理,就拿出來與大家一起參詳參詳。
其實,雖然微軟大肆宣傳xml webservices,但就技術來看,其實只要論述.net remoting一種就可以了,xml webservices無非就是在.net remoting中使用了http + soap通信協議的一種特例而已。
.net remoting應用到dal中可能出于兩種目的:
(1) 希望實現跨平臺數據訪問,因為ado.net中的dataset是可以被序列化的,通過remoting或webservices可以在客戶端恢復現場;
(2) 減輕服務器壓力,增加系統靈活性。
這有點類似于上面的asta技術,只不過這里的協議
換成了.net remoting protocal。但即使用這種方式,
還是和asta的靈活性有區別,畢竟,remoting要
求在客戶端注冊每一個dal的訪問接口,一旦接口
變化,接口必須重新注冊!
所以,作者的建議是:盡量避免使用.net remoting來
構建應用程序的dal模塊(如果是business logic layer,則不
存在這個問題),除非真的是“迫不得已”(例如:必須在dal
層實現分布式計算或者客戶堅持使用.net remoting j)!
以下部分因時間限制,正在撰寫中 !
l 我的方案(未完,撰寫中……)
u 綜合現有的技術
ø 在dal之上添加一個新的daf layer:data access facade
n 使用dataset / datatable / dataview + cache management
n 使用objectspaces / eco + ado.net + stored procedure
ø ……
u 使用現成的框架
ø 開源項目推薦使用opf(國外)
ø 商業產品推薦使用grove(國內)
ø ……
u 設計自己的持久層
ø 如果希望自己設計輪子,那么,最好的參考資料莫過于這篇文章:http://www.ambysoft.com/persistencelayer.pdf
ø ……
l 小結(未完,撰寫中……)
l 參考(未完,撰寫中……)