實戰 .Net 數據訪問層 - 3

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2.        Data Entity Façade

      

代碼2:傳統Data Entity

// Customer1:包含基本字段的Customer,屬輕量級Data Entity

[Serializable()]

public class Customer1: xxx // xxx表示可能存在的基類

{

    public string Id;

    public string Name;

    public string Phone;

 

    public Customer1() {...}

}

 

// Customer2:從DataSet繼承的Customer,又稱Typed DataSet

[Serializable()]   

public class Customer2 : System.Data.DataSet

{

private CustomersDataTable tableCustomers;

private OrdersDataTable tableOrders;

 

private DataRelation relationFK_Orders_Customers;       

 

public Customer2() {...}

...

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

實際上,還有一些方案中可能採用了混合模式,比如:雖然從

DataSet繼承(簡單的可以直接從DataTable繼承),但只實現Typed

DataSet的部分功能;或者,雖然包含了基本字段,但在內部實現了

數據填充或轉換(在PetShop中,數據通過DALReader方式獲取

並填充至Data Entity,並沒有直接使用Data Entity進行轉換);還有

一種最徹底的方式:直接採用Reader作爲Data Entity進行Cross

Layer數據交換!這樣,性能是最高了,但也給其它Layer開發人員

帶來了一些不必要的煩惱L

 

對於只包含基本字段的Data Entity,使用起來非常簡單,同時還

能以自己比較熟悉的方式編寫程序,然而,付出的代價也不小:對

於比較複雜的Case,處理起來就不那麼得心應手(即使Framework

提供了這些功能,卻很不Ease of Use,這個可從Borland ECO所帶

OCL中略知一二,.NET Framework ObjectSpaces中所帶的OPath

也是半斤八兩L)!

幸好,上述的缺點正是Typed DataSet之強項!

雖然體形龐大,但不失靈活,這就是ADO.NET帶給我們的“禮

物”J不得不承認,用Typed DataSet雖然可能導致一系列問題(性

能,維護),但有時候我們還真是願意體會這種“痛,並快樂着”的

感覺(當然了,這種感覺並不僅僅限於處理複雜Case時的Ease of Use

體驗)!

Duwamish這樣做了,作者的前一個項目也這樣做了,您是不是

也準備這樣做呢(系統架構師們不定又要大發雷霆了J)?

 

Ok,說這麼多,就一個目的:當然是“隆重推出”作者自己“苦

心孤詣”多年卻被“無數”系統架構師“否決”的Data Entity!實戰

沒機會,管它呢,先發個稿子到這裏,待大家一起討論討論,看看

是否有出頭之日J

 

下一段:http://www.csdn.net/develop/Read_Article.asp?id=27546

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章