熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NET中容易混淆的幾組重要概念

2013-11-13 11:01:53  來源: .NET編程 

  許多朋友在學習和開發NET程序的過程中經常發現一些誤用NET概念的情況本文將對AJAXLINQLambda等相關的概念進行梳理希望在明確這些概念之後大家能夠把注意力集中在對於具體問題的分析解決上而不要讓溝通成為瓶頸

  在這篇文章中希望澄清三組概念它們是

  ◆AJAX / AJAX框架 / AJAXNET (Professional) / ASPNET AJAX
  ◆LINQ / LINQ to SQL / LINQ to XXX
  ◆Lambda Expression / Expression Tree / 匿名方法

  AJAX / AJAX框架 / AJAXNET (Professional) / ASPNET AJAX

  這是我見過的混淆最多的一組概念不過當去年AJAX技術如火如荼AJAX框架層出不窮而微軟又推出ASPNET AJAX框架之後這四個概念之間的混淆也愈發嚴重起來了我經常能看到這樣的問題

  ◆我在用AJAX技術時不知道怎麼在UpdatePanel裡……
  ◆我用AJAXNET框架調用Web Service時……

  這是非常典型的概念混淆上面兩句話的AJAX與AJAXNET都應該使用ASPNET AJAX替換關於這幾個概念的區別我《深入淺出ASPNET AJAX》系列WebCast多次進行解釋不過收效似乎並不明顯於是我打算在這裡再進行一下說明

  AJAX是Asynchronous JavaScript and XML縮寫這個概念代表的是一種技術當您在說我在項目中使用了AJAX技術時只是代表了您使用客戶端XMLHttpRequest對象與服務器端進行異步通信不過因為隨著AJAX技術的運用往往會帶來豐富的客戶端效果因此對AJAX技術的廣義理解也可以認為這是一種操作客戶端DOM而帶來豐富效果的技術(這個廣義的描述其實並不准確大家明白老趙的意思就可以了)

  AJAX框架是一套輔助開發人員使用AJAX技術的代碼包(庫etc一個AJAX框架的目的一般是對XMLHttpRequest對象的使用進行封裝並提供一些操作DOM元素或者實現特殊效果的捷徑成熟的AJAX框架有很多它們可以被分為以客戶端為中心面向特定服務器技術兩大類前者的優秀代表有(排名不分先後)PrototypejQueryMootoolsYUIDojo等等(最後兩個其實更接近一套客戶端界面庫也就是廣義的AJAX框架)而後者的典型代表既是AJAXNET和ASPNET AJAX了——當然也有優秀的AJAX框架面向其他服務器技術在此不提

  AJAXNET (Professional)是ASPNET平台上著名的AJAX框架誕生於月(雖然正式命名為AJAXNET則是在兩個月之後)作者為Michael Schwarz

  同年Michael為AJAXNET提供了更豐富的功能(主要是安全性方面)並將其改名為AJAXNET ProfessionalAJAXNET提供的最主要的(也是唯一)的功能就是異步調用服務器端方法可謂非常純粹的基於數據的AJAX使用方式這個框架是一個個人作品有支持NET 的版本它並不屬於微軟官方目前已經停止更新

  ASPNET AJAX的Code Name為Atlas在CTP向Beta版轉移時曾經發生過翻天覆地的變化ASPNET AJAX中包含了UpdatePanel等控件可以非常透明地為現有的ASPNET WebForms應用程序添加AJAX效果此外還提供了客戶端異步調用Web Services的方法使開發人員也能夠使用面向數據的方式使用AJAX技術值得一提的是ASPNET AJAX的附屬品相當豐富例如ASPNET AJAX名為Microsoft AJAX Library的客戶端部分是一個純客戶端AJAX框架提供了面向對象類型系統浏覽器兼容層異步通信層等多種基礎組件ASPNET AJAX的開源擴展包AJAX Control Toolkit包含了數十個可以直接使用的AJAX服務器端控件這樣開發人員能夠輕松地添加豐富的客戶端效果同時官方還為ASPNET AJAX提供了非正式地擴展包其中的History等優秀控件也將加入未來版本的ASPNET AJAX框架中ASPNET AJAX是官方出品的AJAX框架目前已經被集成到ASPNET 中去了因此其版本號也從ASPNET AJAX 一下子躍升為ASPNET AJAX 如果您看到了這些版本號也請不要疑惑其實ASPNET AJAX 相對於ASPNET AJAX 來說只是修補了一些細小bug幾乎沒有任何變化

  LINQ / LINQ to SQL / LINQ to XXX

  LINQ是新生事物不過從不少文章和討論上看來這方面的概念也已經有點混沌不清了因此我們經常可以看到這樣的話

  ◆LINQ只能將數據表與實體屬性一一對應……
  ◆LINQ開發指南在LINQ中進行數據庫字段映射……

  以上兩句話其實說的都是LINQ to SQL而不是指LINQ可能由於LINQ to SQL的上鏡率最廣(連MSDN上About LINQ的第一個示例就是查詢數據庫的)因此許多人都將LINQ to SQL與LINQ混用這會給初學者造成誤解認為LINQ就是LINQ to SQLLINQ to SQL就是LINQ——事實當然不是這樣的

  LINQ是LanguageIntegrated Query的縮寫是C# 和VB 中新加入的語言特性可以在編程時使用內置的查詢語言進行基於集合的操作這麼做可以大大簡化開發過程提高開發效率例如

List userList = GetUserList();
var userWithOddId = from u in userList
                    where uUserID % ==
                    select u;
 
foreach (User u in userWithOddId)
{
    ConsoleWriteLine(uUserName);
}

   如果沒有LINQ要篩選出ID為奇數的User對象則需要創建一個List然後遍歷整個列表將符合特定條件的User對象放入新列表而有了LINQ這部分的篩選就變得非常容易

      甚至只需要一句話就能完成如果覺得這個例子不夠說明LINQ對生產力有重大貢獻的話請關注我接下來的一篇文章(暫定名為《我們為什麼要擁抱LINQ》)LINQ特指形如上面這段代碼中fromwhereselect這樣的用法其返回值是IQueryable或IEnumerable

       LINQ to SQL是NET 內置的一個輕量級O/R Mapping解決方案可以將數據表映射為實體對象方便開發人員對數據庫的操作可見LINQ to SQL實只是LINQ的一個實現提供了一個可以查詢SQL Server數據庫的LINQ Provider

       LINQ Provider是LINQ查詢的執行器標准LINQ語法支持許多的操作符但是某個具體的LINQ實現可能只支持其中的一部分NET 默認提供了三種LINQ Provider分別是LINQ to Object(即上面的例子)LINQ to SQL以及LINQ to XML

       LINQ to XXX表示使用LINQ針對XXX這種數據進行查詢的解決方案我們可以自定義LINQ Provider使用我們自定義的查詢規則來處理特定數據集目前互聯網上已經可以找到數十種LINQ Provider(如LINQ to FlickrLINQ to NHibernate等)而已經處於beta 階段的ADONET Entity Framework最終也會提供一個LINQ Provider叫做LINQ to Entities


From:http://tw.wingwit.com/Article/program/net/201311/15025.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.