冷月葬花魂 发表于 2015-1-18 11:28:39

ASP.NET教程之廓清几组.NET相干的主要观点仓酷云

如果英语好,口才好,加上女孩子的优势说不定有机会进去做做别的工具)  承蒙人人厚爱,很多伴侣城市把碰到的成绩向老赵举行询问。不外在浏览良多伴侣成绩的过程当中,和平常和他人会商中,亦或是园子里的文章中常常发明一些误用观点的情形。假如在观点上没无形成共鸣,那末在事情和交换上就会形成很多成绩。因而,固然老赵已在其他一些中央(比方WebCast或一些文章的批评)做过注释,可是如今仍旧以为有需要专程来廓清一些观点,注释一下这些观点之间的区分和接洽。但愿在明白这些观点以后,人人可以把注重力会合在关于详细成绩的剖析办理上,而不要让相同成为瓶颈。
  在这篇文章中,我但愿廓清三组观点,它们是:


[*]AJAX/AJAX框架/AJAX.NET(Professional)/ASP.NETAJAX
[*]LINQ/LINQtoSQL/LINQtoXXX
[*]LambdaExpression/ExpressionTree/匿名办法

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

  这是我见过的搅浑最多的一组观点。不外当客岁AJAX手艺热火朝天,AJAX框架层见叠出,而微软又推出ASP.NETAJAX框架以后,这四个观点之间的搅浑也愈发严峻起来了。我常常能看到如许的成绩:


[*]我在用AJAX手艺时不晓得怎样在UpdatePanel里……
[*]我用AJAX.NET框架挪用WebService时……
  这长短常典范的观点搅浑,下面两句话的AJAX与AJAX.NET都应当利用ASP.NETAJAX交换。关于这几个观点的区分我《深切浅出ASP.NETAJAX》系列WebCast屡次举行注释,不外见效仿佛其实不分明。因而我盘算在这里再举行一下申明:
  AJAX是AsynchronousJavaScriptandXML缩写。这个观点代表的是一种手艺,当您在说“我在项目中利用了AJAX手艺时”,只是代表了您利用客户端XMLHttpRequest对象与服务器端举行异步通讯。不外由于跟着AJAX手艺的使用常常会带来丰厚的客户端效果,因而对AJAX手艺的狭义了解也能够以为这是一种操纵客户端DOM而带来丰厚效果的手艺(这个“狭义”的形貌实在其实不正确,人人分明老赵的意义就能够了)。
  AJAX框架是一套帮助开辟职员利用AJAX手艺的代码包(库,etc.)。一个AJAX框架的目标通常为对XMLHttpRequest对象的利用举行封装,并供应一些操纵DOM元素大概完成特别效果的“捷径”。成熟的AJAX框架有良多,它们能够被分为“以客户端为中央”和“面向特定服务器手艺”两年夜类。前者的优异代表有(排名不分前后):Prototype、jQuery、Mootools、YUI、Dojo等等(最初两个实在更靠近一套客户端界面库,也就是“狭义”的AJAX框架);尔后者的典范代表既是AJAX.NET和ASP.NETAJAX了——固然,也有优异的AJAX框架面向其他服务器手艺,在此不提。
  AJAX.NET(Professional)是ASP.NET平台上出名的AJAX框架,出生于2005年2月(固然正式定名为AJAX.NET则是在两个月以后),作者为MichaelSchwarz。同年10月,Michael为AJAX.NET供应了更丰厚的功效(次要是平安性方面),并将其更名为AJAX.NETProfessional。AJAX.NET供应的最次要的(也是独一)的功效就是异步伐用服务器端办法,可谓十分地道的“基于数据”的AJAX利用体例。这个框架是一个团体作品,有撑持.NET1.1和2.0的版本,它其实不属于微软官方,今朝已中断更新。
  ASP.NETAJAX的CodeName为“Atlas”,在CTP向Beta版转移时已经产生过天翻地覆的变更。ASP.NETAJAX中包括了UpdatePanel等控件,能够十分通明地为现有的ASP.NETWebForms使用程序增加AJAX效果。别的还供应了客户端异步伐用WebServices的办法,使开辟职员也可以利用面向数据的体例利用AJAX手艺。值得一提的是ASP.NETAJAX的“从属品”相称丰厚。比方ASP.NETAJAX名为“MicrosoftAJAXLibrary”的客户端部分是一个纯客户端AJAX框架,供应了面向对象范例体系、扫瞄器兼容层、异步通讯层等多种基本组件;ASP.NETAJAX的开源扩大包“AJAXControlToolkit”包括了数十个能够间接利用的AJAX服务器端控件,如许开辟职员可以轻松地增加丰厚的客户端效果。同时,官方还为ASP.NETAJAX供应了“非正式”地扩大包,个中的History等优异控件也将到场将来版本的ASP.NETAJAX框架中。ASP.NETAJAX是官方出品的AJAX框架,今朝已被集成到ASP.NET3.5中往了,因而其版本号也从ASP.NETAJAX1.0一会儿“跃升为”ASP.NETAJAX3.5。假如您看到了这些版本号也请不要困惑,实在ASP.NETAJAX3.5相对ASP.NETAJAX1.0来讲只是修补了一些微小bug,几近没有任何变更。

LINQ/LINQtoSQL/LINQtoXXX

  LINQ是重生事物,不外从很多文章和会商上看来,这方面的观点也已有点浑沌不清了。因而我们常常能够看到如许的话:


[*]LINQ只能将数据表与实体属性逐一对应……
[*]LINQ开辟指南:在LINQ中举行数据库字段映照……
  以上两句话实在说的都是LINQtoSQL而不是指LINQ。大概因为LINQtoSQL的上镜率最广(连MSDN上AboutLINQ的第一个示例就是查询数据库的),因而很多人都将LINQtoSQL与LINQ混用,这会给初学者形成曲解,以为LINQ就是LINQtoSQL,LINQtoSQL就是LINQ——现实固然不是如许的。
  LINQ是Language-IntegratedQuery的缩写,是C#3.0和VB9.0中新到场的言语特征,能够在编程时利用内置的查询言语举行基于汇合的操纵。这么做能够年夜年夜简化开辟历程,进步开辟效力。比方:
List<User>userList=GetUserList();
varuserWithOddId=fromuinuserList
whereu.UserID%2==1
selectu;

foreach(UseruinuserWithOddId)
{
Console.WriteLine(u.UserName);
}
  假如没有LINQ,要选择出ID为奇数的User对象则必要创立一个List,然后遍历全部列表,将切合特定前提的User对象放进新列表。而有了LINQ,这部分的选择就变得十分简单,乃至只必要一句话就可以完成。假如以为这个例子不敷申明LINQ对临盆力有严重奉献的话,请存眷我接上去的一篇文章(暂命名为《我们为何要拥抱LINQ》)。LINQ特指形如下面这段代码中from...where...select如许的用法,其前往值是IQueryable<T>。
  LINQtoSQL是.NET3.5内置的一个轻量级O/RMapping办理计划,能够将数据表映照为实体对象,便利开辟职员对数据库的操纵。可见,LINQtoSQL实只是LINQ的一个完成,供应了一个能够查询SQLServer数据库的LINQProvider。
  LINQProvider是LINQ查询的实行器,尺度LINQ语法撑持很多的操纵符,可是某个详细的LINQ完成大概只撑持个中的一部分。在.NET3.5默许供应了三种LINQProvider,分离是LINQtoObject(即下面的例子),LINQtoSQL和LINQtoXML。
  LINQtoXXX暗示利用LINQ针对XXX这类数据举行查询的办理计划。我们能够自界说LINQProvider,利用我们自界说的查询划定规矩来处置特定命据集。今朝互联网上已能够找到数十种LINQProvider(如LINQtoFlickr,LINQtoNHibernate等),罢了经处于beta3阶段的ADO.NETEntityFramework,终极也会供应一个LINQProvider,叫做“LINQtoEntities”。

LambdaExpression/ExpressionTree/匿名办法

  LambdaExpression从界说上讲是指带有“=>”标记的表达式,比方:


[*]x=>x+1
[*](x,y)=>x>y
[*]()=>5
[*](x,y)=>{returnx>y;}
  LambdaExpreesion自己其实不会在观点上引发搅浑,不外因为在C#3.0中LambdaExpression有两种一模一样的利用体例,有些伴侣就会发生疑问,事实LambdaExpression是做甚么用的?
  LambdaExpression的一个主要感化就是供应一种利用匿名办法的新语法,在《您擅长利用匿名函数吗?》一文中您能够看到这类利用体例。使用LambdaExpression暗示匿名函数的一个主要的弱点就是没法利用带out或ref关头字的参数,不外它比利用delegate关头字的暗示法略为复杂一点,由于无需供应参数范例,比方:
publicstaticboolCallMethod(Func<int,bool>method)
{
returnmethod(0);
}

staticvoidMain(string[]args)
{
CallMethod(delegate(inta){returnfalse;});
CallMethod(a=>{returnfalse;});
}
  可见,利用LambdaExpression暗示的匿名办法无需指定参数范例,由于这统统都已交给编译器来判别了。这一点在参数范例长而庞大的情形下(比方并行库中的办法)十分主要。因而如今要不是会触及到out/ref参数,我城市利用LambdaExpression来暗示匿名办法。
  LambdaExpression的另外一个感化天然就是机关一个LambdaExpression对象。恣意一个Expression对象都暗示了一个ExpressionTree的根节点,而开辟职员能够经由过程剖析这个ExpressionTree来完成特定的功效。我们编写的办法能够承受一个LambdaExpression作为参数,可是我们还必需对这个参数的情势举行限定,这个参数才干成心义。这时候候我们就会利用Expression<TDelegate>范例作为办法的参数范例,如许在利用这个办法时就必需利用满意TDelegate的署名及前往值的LambdaExpression才干编译经由过程。比方:
publicstaticvoidCallMethod(Expression<Func<int,bool>>prediect){...}

staticvoidMain(string[]args)
{
CallMethod(a=>a>0);
}
  剖析一个ExpressionTree并非一件复杂的事变,必定水平上这相称于在举行编译事情,只是终极天生的了局不是呆板码或IL,而是一个实行了局,而且语法剖析的历程已由C#编译器帮我们完成了。我在《扩大LINQtoSQL:利用LambdaExpression批量删除数据》一文中已经提到过这一点,而且给出了一个实例,感乐趣的伴侣们能够参考一下。
  必要注重的是,假如在机关一个Expression对象时,LambdaExpression的Body部分不克不及是Statement;而在暗示一个匿名对象时LambdaExpression的Body既能够是Expression也能够是Statement。不管是利用Expression仍是Statement作为Body,只需暗示的寄义不异,编译器城市天生一样的匿名函数。比方以下两种写法实际上是等价的:


[*](x,y)=>x>y
[*](x,y)=>{return(x>y);}

  最初,我留给人人一个成绩:以下两个做法的了局是不异的,而代码也十分靠近。不外它们实在有着十分年夜的区分,您能指出吗?
varintList=newList<int>(){1,2,3,4,5};
foreach(intiinintList.Where(i=>i%2==1))
{
Console.WriteLine(i);
}
varintList=newList<int>(){1,2,3,4,5}.AsQueryable();
foreach(intiinintList.Where(i=>i%2==1))
{
Console.WriteLine(i);
}
来自:以为有需要来廓清几组主要观点
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而net网页编程是公开了。

山那边是海 发表于 2015-1-21 07:45:27

但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。

变相怪杰 发表于 2015-1-30 11:43:24

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

兰色精灵 发表于 2015-2-6 11:00:15

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

飘飘悠悠 发表于 2015-2-6 14:56:52

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

第二个灵魂 发表于 2015-2-16 16:58:33

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

冷月葬花魂 发表于 2015-3-5 07:10:32

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。

只想知道 发表于 2015-3-7 17:29:42

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

分手快乐 发表于 2015-3-11 01:16:07

ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。

爱飞 发表于 2015-3-17 17:23:57

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

透明 发表于 2015-3-24 14:26:50

我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
页: [1]
查看完整版本: ASP.NET教程之廓清几组.NET相干的主要观点仓酷云