中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


話說Linq to SQL理論上應(yīng)該支持多種數(shù)據(jù)庫(kù)的,而且應(yīng)該支持多種數(shù)據(jù)庫(kù),到最后卻落的這個(gè)局面,是為了商業(yè)考慮還是本來技術(shù)就不成熟?不得而知。不過不管怎么說Linq to SQL的體系結(jié)構(gòu)確實(shí)是支持?jǐn)U展的。

在System.Data.Linq.Mapping這個(gè)命名空間下微軟提供了一個(gè)特性:ProviderAttribute,使用強(qiáng)類型的DataContext或使用Xml做映射的時(shí)候,該特性可以用來指定具體的數(shù)據(jù)庫(kù)提供者。如下:

[Database(“dbo.cnblogs”)]
[Provider(
typeof(SqlProvider))]
Public CnBlogDataContext : DataContext
{

}

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


關(guān)于設(shè)計(jì)模式的旁白

橋接模式

看到這里也許大家都說,哦,原來實(shí)際的事情都是這個(gè)IProvider干的啊,IProvide是個(gè)接口,下面可能有SqlProvider,OracleProvider,AccessProvider,只要提供這些Provider我們就可以無限擴(kuò)展數(shù)據(jù)庫(kù)了。是的,設(shè)計(jì)到這一步已經(jīng)可以滿足多數(shù)據(jù)庫(kù)的要求了,但是數(shù)據(jù)庫(kù)種類的多樣性只是一個(gè)方面,還有每種數(shù)據(jù)庫(kù)版本的差異呢?如果我們就使用繼承,就這樣無限的去擴(kuò)展,最后會(huì)得到一個(gè)很復(fù)雜的類層次,層次搞復(fù)雜后不僅僅難于重構(gòu),更要的是會(huì)出現(xiàn)很多重復(fù),靈活性也降低了。

如果光使用繼承,我們可能會(huì)得到這樣的繼承樹:

這樣的繼承層次看起來貌似很“專業(yè)”,但是靈活性實(shí)在是不敢恭維,首先,任何一個(gè)層次的小小變動(dòng)在整個(gè)繼承鏈上都要改動(dòng),如果增加一種數(shù)據(jù)庫(kù),而這種數(shù)據(jù)有會(huì)有幾種版本,各個(gè)版本之間又有些差異,那么類的數(shù)量會(huì)成倍增長(zhǎng)。還有一個(gè),那就是子類之間有可能造成重復(fù),假如Sql2000Provider和Oracle9iProvider之間有重復(fù)怎么辦?C#又不支持多繼承,我們無法使用Martin Folwer的重構(gòu)方法將子類重復(fù)的部分提升到父類。那有什么好辦法呢?看看微軟的設(shè)計(jì)師是怎么干的。

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


IProvder的初始化方法Initialize需要兩個(gè)參數(shù),其中一個(gè)就是一個(gè)IDataService接口(注意,這里是接口,那肯定有很多實(shí)現(xiàn),不過由于Linq to SQL就支持一種數(shù)據(jù)庫(kù),現(xiàn)在也只有一種實(shí)現(xiàn)了,不過我們可以通過這種形式來想象和擴(kuò)展,并可以學(xué)習(xí)這種理念),這個(gè)時(shí)候我們得到的是另外一種類圖:

這里以組合的方式,組合Provider和IDataService,類的繼承層次簡(jiǎn)明了很多,也可以很容易處理子類之間的重復(fù)了。

實(shí)際上這就是橋接模式,該模式的意圖是抽象和實(shí)現(xiàn)相分離,在這里IProvider就是抽象,而IDataService這邊就是實(shí)現(xiàn)了。通過IDataService這個(gè)接口,把SqlProvider和CommonDataService,DBProvider和DBDataService之間的依賴消除了。仔細(xì)體會(huì)一下,我們的實(shí)際項(xiàng)目中在哪些地方出現(xiàn)過這樣的場(chǎng)景?不久以前我發(fā)了一篇博客《重構(gòu)到Brdge模式》,那里描述了我實(shí)際項(xiàng)目中一個(gè)真實(shí)的場(chǎng)景。

請(qǐng)注意的是,實(shí)際的Linq to SQL因?yàn)橹恢С諷QL Server,所以上面的類圖描述的關(guān)系并不存在,但是我們從代碼中完全可以想象的到即使要擴(kuò)展也是很容易的,這就是架構(gòu)的力量,即使是昨天的設(shè)計(jì)也能應(yīng)付明天的變化。

關(guān)于Provider的初始化就介紹到這里了,在文章末尾的源代碼下載里提供了IProvider類和SqlProvider類,你可以看看初始化的過程,并聯(lián)系上面的圖想想如何構(gòu)建一個(gè)可擴(kuò)展的架構(gòu)。


Linq to SQL源代碼下載,注意不是完整源代碼,不能通過編譯,我會(huì)逐漸增加源代碼

it知識(shí)庫(kù)走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 天天射夜夜操 | 日日干日日 | 亚洲在线免费观看 | 91精品国产综合久久久久久丝袜 | 国产午夜精品久久 | 黄色中文字幕 | 九九久久这里只有精品 | 成人美女免费网站视频 | 欧美一区二不卡视频 | 在线观看日韩 | 日本三级电影在线免费观看 | 午夜小视频在线播放 | 成人精品一区二区三区 | 欧美中文字幕一区二区三区 | 欧美综合一区 | 欧美日韩亚洲视频 | 毛片久久久| 91看片网| 精品欧美一区二区久久久伦 | 福利网站导航 | 久久国产亚洲 | 成人三级网址 | 日韩成人免费av | 天天综合操 | 黄色在线观看国产 | 国产精品视频入口 | 国产一区二区日韩 | 妖精视频一区二区三区 | 亚洲欧美成人影院 | 国产福利视频 | 国产a区 | 99精品视频免费观看 | 一级做a毛片 | 久久99视频这里只有精品 | 在线黄色影院 | 中国一级特黄视频 | 91免费在线视频 | 久久久精品一区 | 亚洲一区综合 | 日本一区二区三区在线观看 | 日韩天堂av |