VB.NET數(shù)據(jù)實體層實現(xiàn)方案介紹
作為VB.NET三層架構(gòu)中的首要一層,VB.NET數(shù)據(jù)實體層占據(jù)著舉足輕重的地位。首先我們來分析一下它的具體含義。我們首先需要解決的是數(shù)據(jù)的表示方式的問題,在VB開發(fā)中,相信大家都遇到過如何有效的構(gòu)造數(shù)據(jù)實體的問題。#t#
單個類,集合類,集合類中如何操作單個類,如何用填充數(shù)據(jù)實體,這些問題解決起來都不是很容易,也有很多方法來實現(xiàn),對于集合類的實現(xiàn),可以用數(shù)組,可以用集合對象,也可以用字典對象,當(dāng)然實例化數(shù)據(jù)實體也有很多方法,象最常見的工廠模式,這里就不討論了,我在項目中是用TYPED-DATASET對象來作為數(shù)據(jù)實體,個人覺得VB.NET數(shù)據(jù)實體層有以下好處:
1. 數(shù)據(jù)綁定??梢灾苯雍涂丶壎?,尤其是網(wǎng)格控件,在VB中是很困難的,除非增加個屬性來存放Recordset,這樣一來又要多增加方法來初始化Recordset,并且增加了實例化和封送處理的成本
2. 代碼自動生成。少寫很多代碼,尤其是當(dāng)表中字段很多的時候,并且自動提供了序列化功能
3. 集合類。Typed-Dataset本身就是個集合類,提供添加,刪除,修改,查找單個類的方法
當(dāng)然也有缺點(diǎn),任何事物都無法十全十美,比如很難從中派生出子類,實例化成本高等。
在VB.NET數(shù)據(jù)實體層自動生成Typed-Dataset時,需要做些改動使Entity更好的符合OO的特性
A、自動生成的表對象和行對象是以DataTable和Row結(jié)尾的,這可以通過加如以下代碼來更改:在XML文件中的< xml:schema 節(jié)點(diǎn)加入:
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:codegen="urn:schemas-microsoft-com:xml-msprop" 命名空間
B、重寫 < xs:choice maxOccurs="unbounded"> 節(jié)點(diǎn)后的< xs:element name="Tables”> 節(jié)點(diǎn) < xs:element name="Tables" codegen:typedName="Table" codegen:typedPlural="Tables">
C、由于自動生成的代碼遇到某個字段為NULL時默認(rèn)是報錯,如想不報錯,需在每個Element節(jié)點(diǎn)定義中加入: nillable="true" codegen:nullValue="_null" 或nillable="true" codegen:nullValue="false" 或nillable="true" codegen:nullValue="1900-01-01T00:00:00"
D、Entity的粒度。在考慮實體對象的設(shè)計時,“對象的粒度”是一個需要仔細(xì)考慮的問題,個人喜歡粗粒度的Entity,這樣可以減少與數(shù)據(jù)庫的往返次數(shù),當(dāng)然也不是包含所有的表,這樣效率不高,比如Order,只需要Order 和OrderDetail 表,Product,SalesPerson就不需要了,當(dāng)然也可以用從dataset繼承的自定義類來作為Entity,但個人覺得一般情況下沒必要,畢竟MS的typed-dataset功能更多,而且實現(xiàn)起來也比較復(fù)雜。
以上就是我們?yōu)榇蠹医榻B的VB.NET數(shù)據(jù)實體層相關(guān)特點(diǎn),希望能對大家有所幫幫助。