快捷搜索:

觉得有必要来澄清几组重要概念

承蒙大年夜家厚爱,不少同伙都邑把碰到的问题向老赵进行讯问。不过在涉猎很多同伙问题的历程中,以及日常平凡和别人评论争论中,亦或是园子里的文章中常常发明一些误用观点的环境。假如在观点上没有形成共识,那么在事情和交流上就会造成许多问题。是以,虽然老赵已经在其他一些地方(例如WebCast或一些文章的评论)做过解释,然则现在仍旧感觉有需要特地来澄清一些观点,解释一下这些观点之间的差别和联系。盼望在明确这些观点之后,大年夜家能够把留意力集中在对付详细问题的阐发办理上,而不要让沟通成为瓶颈。

在这篇文章中,我盼望澄清三组观点,它们是:

AJAX / AJAX框架 / AJAX.NET (Professional) / ASP.NET AJAX

LINQ / LINQ to SQL / LINQ to XXX

Lambda Expression / Expression Tree / 匿名措施

AJAX / AJAX框架 / AJAX.NET (Professional) / ASP.NET AJAX

这是我见过的肴杂最多的一组观点。不过当去年AJAX技巧汹涌澎拜,AJAX框架层出不穷,而微软又推出ASP.NET AJAX框架之后,这四个观点之间的肴杂也愈发严重起来了。我常常能看到这样的问题:

我在用AJAX技巧时不知道怎么在UpdatePanel里……

我用AJAX.NET框架调用Web Service时……

这是异常范例的观点肴杂,上面两句话的AJAX与AJAX.NET都应该应用ASP.NET AJAX调换。关于这几个观点的差别我《深入浅出ASP.NET AJAX》系列WebCast多次进行解释,不过见效彷佛并不显着。于是我盘算在这里再进行一下阐明:

AJAX是Asynchronous JavaScript and XML缩写。这个观点代表的是一种技巧,当您在说“我在项目中应用了AJAX技巧时”,只是代表了您应用客户端XMLHttpRequest工具与办事器端进行异步通信。不过由于跟着AJAX技巧的运用每每会带来富厚的客户端效果,是以对AJAX技巧的广义理解也可以觉得这是一种操作客户端DOM而带来富厚效果的技巧(这个“广义”的描述着实并不准确,大年夜家明白老赵的意思就可以了)。

AJAX框架是一套帮助开拓职员应用AJAX技巧的代码包(库,etc.)。一个AJAX框架的目的一样平常是对XMLHttpRequest工具的应用进行封装,并供给一些操作DOM元素或者实现特殊效果的“捷径”。成熟的AJAX框架有很多,它们可以被分为“以客户端为中间”和“面向特定办事器技巧”两大年夜类。前者的优秀代表有(排名不分先后):Prototype、jQuery、Mootools、YUI、Dojo等等(着末两个着实更靠近一套客户端界面库,也便是“广义”的AJAX框架);而后者的范例代表既是AJAX.NET和ASP.NET AJAX了——当然,也有优秀的AJAX框架面向其他办事器技巧,在此不提。

AJAX.NET (Professional)是ASP.NET平台上闻名的AJAX框架,出生于2005年2月(虽然正式命名为AJAX.NET则是在两个月之后),作者为Michael Schwarz。同年10月,Michael为AJAX.NET供给了更富厚的功能(主如果安然性方面),并将其改名为AJAX.NET Professional。AJAX.NET供给的最主要的(也是独一)的功能便是异步调用办事器端措施,可谓异常纯挚的“基于数据”的AJAX应用要领。这个框架是一个小我作品,有支持.NET 1.1和2.0的版本,它并不属于微软官方,今朝已经竣事更新。

ASP.NET AJAX的Code Name为“Atlas”,在CTP向Beta版转移时曾经发生过翻天覆地的变更。ASP.NET AJAX中包孕了UpdatePanel等控件,可以异常透明地为现有的ASP.NET WebForms利用法度榜样添加AJAX效果。此外还供给了客户端异步调用Web Services的措施,使开拓职员也能够应用面向数据的要领应用AJAX技巧。值得一提的是ASP.NET AJAX的“隶属品”相称富厚。例如ASP.NET AJAX名为“Microsoft AJAX Library”的客户端部分是一个纯客户端AJAX框架,供给了面向工具类型系统、浏览器兼容层、异步通信层等多种根基组件;ASP.NET AJAX的开源扩展包“AJAX Control Toolkit”包孕了数十个可以直接应用的AJAX办事器端控件,这样开拓职员能够轻松地添加富厚的客户端效果。同时,官方还为ASP.NET AJAX供给了“非正式”地扩展包,此中的History等优秀控件也将加入未来版本的ASP.NET AJAX框架中。ASP.NET AJAX是官方出品的AJAX框架,今朝已经被集成到ASP.NET 3.5中去了,是以其版本号也从ASP.NET AJAX 1.0一会儿“跃升为”ASP.NET AJAX 3.5。假如您看到了这些版本号也请不要疑心,着实ASP.NET AJAX 3.5相对付ASP.NET AJAX 1.0来说只是修补了一些渺小bug,险些没有任何变更。

LINQ to SQL是.NET 3.5内置的一个轻量级O/R Mapping办理规划,可以将数据表映射为实体工具,方便开拓职员对数据库的操作。可见,LINQ to SQL实只是LINQ的一个实现,供给了一个可以查询SQL Server数据库的LINQ Provider。

LINQ Provider是LINQ查询的履行器,标准LINQ语法支持许多的操作符,然则某个详细的LINQ实现可能只支持此中的一部分。在.NET 3.5默认供给了三种LINQ Provider,分手是LINQ to Object(即上面的例子),LINQ to SQL以及LINQ to XML。

LINQ to XXX表示应用LINQ针对XXX这种数据进行查询的办理规划。我们可以自定义LINQ Provider,应用我们自定义的查询规则来处置惩罚特定命据集。今朝互联网上已经可以找到数十种LINQ Provider(如LINQ to Flickr,LINQ to NHibernate等),而已经处于beta 3阶段的ADO.NET Entity Framework,终极也会供给一个LINQ Provider,叫做“LINQ to Entities”。

Lambda Expression / Expression Tree / 匿名措施

Lambda Expression从定义上讲是指带有“=>”符号的表达式,例如:

x => x + 1

(x, y) => x > y

() => 5

(x, y) => { return x > y; }

Lambda Expreesion本身并不会在观点上引起肴杂,不过因为在C# 3.0中Lambda Expression有两种截然不合的应用要领,有些同伙就会孕育发生疑问,究竟Lambda Expression是做什么用的?

Lambda Expression的一个紧张感化便是供给一种应用匿名措施的新语法,在《您善于应用匿名函数吗?》一文中您可以看到这种应用要领。使用Lambda Expression表示匿名函数的一个紧张的毛病便是无法应用带out或ref关键字的参数,不过它比应用delegate关键字的表示法略为简单一点,由于无需供给参数类型,例如:

您可能还会对下面的文章感兴趣: