国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

剖析 .Net 下的數據訪問層技術(五)

2024-07-10 13:03:38
字體:
來源:轉載
供稿:網友
菜鳥學堂:
ø borland eco

素以提供“多快好省”組件著稱的borland公司在微軟發布objectspaces之前率先推出了一套新的開發框架:eco(enterprise core object),先不說其技術特點,就憑其與建模工具together的無縫集成,不得不讓人佩服borland在統一開發過程方面所下的功夫。



根據borland在eco介紹中的定義,簡單說,eco就是:模型驅動(mda-driven)的.net數據庫應用(database application)開發框架(framework)。

(觀點:以作者看來,數據庫應用的核心問題就是dal,也就是本文需要討論的話題)



很明顯,從mda-driven,database application和frmework這些很具震撼效果的詞語不難看出,它們正是borland公司以前及現在都無比強大的核心競爭力所在(當然,還包括ide、components、cross platform等方面,一個公司能有這么多優秀的產品,實在令人尊敬)!

以前,在borland平臺上開發數據庫應用已經非常方便,組件+可視化設計基本可以拿下比較簡單的應用模塊。如今則更上一層,終于推出了自己的o/r mapping解決方案!

以作者的觀點,在together這樣優秀的modeling工具加盟下,配合在framework開發方面的數一數二實力(僅以藝術性而論,vcl framework就可以拿該領域的奧斯卡獎),目前的eco絕對穩坐.net o/r mapping第一把交椅!

(注意:objectspaces尚未發布,暫不考慮。)



關于eco具體開發方面的介紹,大家可以參考“程序員,2003.12,p99”,“程序員,2004.01,p97”,“程序員,2004.02,p100”。



以下,作者主要分析利用eco開發所帶來的種種好處及其不足,供各位參考。



優點:

(1) 與typed dataset(類型化的dataset,在vs.net中可自動生成)相比具有明顯優勢;除了可以在uml/

代碼間自由切換外,eco可以支持自定義數據類型

和計算類型(用過delphi的朋友都知道這是個異常

強大的武器);



(2) ide提供強大的設計時支持,各種工具、組件一應俱全,這也是borland最擅長的領域;



(3) 集成together建模工具,將mda發揮得淋漓盡致;之所以將這條放在第3位,請參考下面的缺點分析;



(4) 引入object constraints language(ocl),該標準得到了omg組織的官方支持,號稱:oo sql(面向對象的sql),對于不熟悉sql的開發人員是一大福音;



缺點:

(1) 資源消耗較大,普通機器難以體會其優勢;這方面,rational xde倒是做得相當不錯;



(2) 有一定學習曲線,比如:ocl(object constraints language),雖然與sql不同,但從語法角度還不算十分簡潔;就作者自己的體會,可能學習xquery(xml中的查詢語言)或opath(objectspaces中使用的查詢語言)要更輕松一些;



(3) 純商業產品,只有architect版本才包含此功能,而objectspaces直接包含在.net framework中,與vs.net版本無關,可以通過.net framework sdk直接使用;



(4) 輕微過度mda:dal開發人員既然可以在eco中生成數據庫腳本,那dba是否也需要在eco中進行設計呢?

對于企業級應用,作者個人以為:mda開發模式比較適用于dal以上各層的開發,如:system architecture,business façade,business logic,甚至user interface,而對于data storage,可能并不是非常需要mda介入。

試想一下,o/r mapping提供了映射關系,就是希望將rdbms與其它層分離,如果現在全部在一個地方搞定,那豈不是又加重了開發人員的負擔(有時候自動化不見得越多越好)?

還有一點:eco宣稱“代碼/uml雙向同步”,但并沒有保證“代碼/字段可以不同”,這就在一定程度上喪失了靈活性!

(提示:uml中“同步”意味著設計方案與代碼框架“一致”,但在o/r mapping中,反而不要求這種“一致”,只需要在dal與schema間建立對應關系既可,而borland將傳統建模的思想照搬到dal設計中,作者認為是值得商榷的。這方面,其它的o/r mapping方案就做得比較自然,突出了“mapping”的含義,而不僅僅是簡單的“synchronization”。)



ø 其它

還有一些其它的技術也可以實現o/r mapping或類似功能,就作者試用過的一些解決方案來說,constructor(國外)、grove(國內)都是不錯的選擇,constructor甚至號稱“model driven rad for .net”,有興趣的朋友可以訪問如下站點:

http://www.dotnetbuilders.com

http://grove.911link.com



說了許多,又到了“綜上所述”時間,作者再次放膽建議:

(1)與基于ado.net的dal實現方式不同,o/r mapping有巨大

優勢,但也同時隱藏著風險:



n 最嚴重的問題就是與存儲過程的沖突!

眾所周知,o/r mapping的本質是映射,在這方面各類實現

都有其嚴格定義,說白了,就是將表操作轉化為對象操作。

但存儲過程的靈活性(傳入參數,返回結果等)卻不得不使

其暫時地被排除在o/r mapping大家庭外(至少在目前,上

述介紹過的ojb、objectspaces等方案都不支持存儲過程);

另一方面,如果我們希望實現比較復雜的數據邏輯時,卻不

得不以新的object language(如:ocl、oql等)書寫原

本可以封裝在存儲過程中的復雜sql語句。而且,即使寫

出了這些數據邏輯,也會令人感覺非常古怪甚至丑陋(某種

意義上,這也違背了o/r mapping的初衷)!



n 第二個問題是:在o/r mapping的環境中,系統的執行效率將有一定損失,即使使用了cache management(一次性裝載配置文件)或者delayed loading(又稱lazy loading,只在訪問實體類數據時才真正連接數據庫)技術,由于在初次裝載數據時使用了reflection機制去定位實體類(在某些方案中,映射關系以.net attribute方式體現,則更花時間),所以肯定不如直接通過ado.net填充數據來得那么快!



如果各位認為上述風險不是問題,那下面的各條就是作者的真正

建議了。



(2)在大型應用(一般指企業級應用)開發中,eco是很好的

選擇;



(3)如果是普通n-tier應用,則objectspaces足矣;



(4)想要學習o/r mapping的朋友,可以看看opf / ojb源碼,

這兩個方案的實現思路與eco / objectspaces是有一些相似的;



(5)如果不希望使用現成的o/r mapping,則可在opf / ojb的基

礎上按需裁減,或者參考下面的“設計自己的持久層”中提出的方案。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 芮城县| 镇赉县| 上林县| 喀喇沁旗| 蚌埠市| 镇原县| 林西县| 南漳县| 卢龙县| 双鸭山市| 海城市| 五华县| 霍山县| 措勤县| 监利县| 平安县| 板桥市| 阿城市| 玉溪市| 罗定市| 郁南县| 永清县| 克东县| 洪泽县| 孟津县| 肥乡县| 青铜峡市| 新兴县| 亳州市| 普安县| 剑川县| 双柏县| 霍城县| 独山县| 吉首市| 陵川县| 普兰店市| 庆安县| 开封县| 修武县| 南安市|