新聞中心
LINQ有很多值得學(xué)習(xí)的地方,這里我們主要介紹LINQ構(gòu)建框架設(shè)計(jì),包括介紹Keith Farmer提到的避免子類的方法等方面。

創(chuàng)新互聯(lián)公司主營昭蘇網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),昭蘇h5成都小程序開發(fā)搭建,昭蘇網(wǎng)站營銷推廣歡迎昭蘇等地區(qū)企業(yè)咨詢
如今,LINQ的版本發(fā)布已經(jīng)塵埃落定,是時(shí)候思考如何使用它了。Keith Farmer甚至談到了使用LINQ以消除子類。不過,在我們了解這些之前,還是先看看微軟的官方指南吧。
根據(jù)LINQ構(gòu)建框架設(shè)計(jì)指南的精神,微軟發(fā)布了基于LINQ構(gòu)建框架設(shè)計(jì)指南。LINQ構(gòu)建框架設(shè)計(jì)指南涵蓋了諸如API的設(shè)計(jì)與行為等主題。與很多公司制定的編碼指南不同,它并沒有包含設(shè)計(jì)的細(xì)枝末節(jié),例如命名模式與格式,除非它們牽涉到公有的API庫。
大多數(shù)框架設(shè)計(jì)指南最終都能夠找到與FxCOP集成的方式。FxCOP是一個(gè)代碼分析工具,它被微軟和其它公司用來確保編碼的一致性。
在概括的介紹之后,該文檔介紹了擴(kuò)展方法(Extension Methods)和泛型委托Func、Action以及Expression。在指南給出的標(biāo)準(zhǔn)警告中,有一個(gè)與命名空間沖突無關(guān)的指導(dǎo)——它要求在普通方法能夠?qū)崿F(xiàn)的情況下,不要濫用擴(kuò)展方法。當(dāng)兩個(gè)庫都公開了相同類型的擴(kuò)展方法時(shí),會(huì)發(fā)生方法名稱的沖突。一旦發(fā)生,只能導(dǎo)入一個(gè)庫,另一個(gè)庫則必須使用完整的名稱才能被引用。
在擴(kuò)展LINQ一節(jié)中,對(duì)于如何命名泛型類型有一個(gè)頗有助益的建議。在類型名為S以指代包含元素項(xiàng)的集合時(shí),名為T的泛型類型總是指代集合的元素項(xiàng)(items)。雖然這不是強(qiáng)制性的,但至少有助于閱讀內(nèi)建方法(built-in methods)。
對(duì)于性能,指南提出的一個(gè)建議是,如果性能牽涉到計(jì)算集合的元素總數(shù),則實(shí)現(xiàn)ICollection有助于提高性能。當(dāng)你只能實(shí)現(xiàn)IEnumerable時(shí),就必須遍歷整個(gè)集合才能得到集合的元素總數(shù)。
現(xiàn)在,再回頭看看Keith Farmer提到的避免子類的方法:
我過去一直在考慮的一件事情是削減類的職責(zé),使其只具備基本的定義:恰如其分的屬性定義,與屬性對(duì)應(yīng)的方法,以及構(gòu)造器和類型轉(zhuǎn)換器。
然后使用擴(kuò)展方法定義適當(dāng)?shù)牟僮?,而不需要維護(hù)類作為自身實(shí)體的概念,這樣就沒有必要?jiǎng)?chuàng)建子類型了(即使子類型是可行的)。
例如,一個(gè)Node不需要知道Graph的操作也能夠工作良好,也可以認(rèn)為Graph不需要了解IsNetworkRouter的內(nèi)容。
在這種情況下,類似于Traverse(GraphLink)這樣的方法就屬于Graph中很好的方法定義,而類似于 FindLeastWorkRoute(Node, Node)這樣的方法,由于它依賴于GraphLink的特定子類型的實(shí)現(xiàn)細(xì)節(jié)(即它具有一個(gè)關(guān)聯(lián)的Work衡量標(biāo)準(zhǔn)),那么在我看來,這樣的方法***定義為一個(gè)擴(kuò)展方法。
如果僅僅是為了實(shí)現(xiàn)應(yīng)用程序特定的邏輯,而去創(chuàng)建一個(gè)自定義子類型,就會(huì)擾亂我們關(guān)注的類(例如,Graph就勝過同時(shí)定義Graph和GraphLink),而通過擴(kuò)展方法就可以避免這樣的情況。以上介紹LINQ構(gòu)建框架設(shè)計(jì)指南。
分享題目:LINQ構(gòu)建框架設(shè)計(jì)學(xué)習(xí)筆記
鏈接URL:http://m.fisionsoft.com.cn/article/djoecej.html


咨詢
建站咨詢
