当前位置: 首页 > news >正文

荣耀、方兵ASP.NET实战进阶

 

ASP.NET实战进阶聊天实录(已整理部分)

2008520

 

随着网络技术的不断成熟,越来越多的人开始认识和了解ASP.NET技术,但熟悉并不等同于掌握,对于怎样去驾驭它很大一部分人还存在一定的疑问和行动的误区,我们请到的两位专家在这方面恰恰有着丰富的实践经验,可以给大家一个很好的点拨和启发。

 

本次做客51CTO.com嘉宾聊天室的是《Asp.net 2.0 网站开发技术详解》一书作者方兵老师老师和《ASP.NET 2.0实战起步》一书的作者荣耀老师老师。

方兵老师老师毕业于北京邮电大学,长期从事ASP.NET软件的开发及研究工作,曾在上海及北京的软件公司历任软件架构师、技术总监等职位,参与过物流、电信、银行及印刷等行业的B/S应用程序的设计与开发。对于实际问题有着很强的实战经验。

荣耀老师老师是南京师范大学教师,南京航空航天大学计算机应用技术博士(在读),C++模板技术和微软.NET技术研究者和教育者,他的著译作品包括《ASP.NET 2.0实战起步》、《.NET大局观(第2版)》、《C++ Templates全览》、《Imperfect C++中文版》、《C++必知必会》、《C/C++安全编程》、《C++模板元编程》以及《Windows Forms 程序设计》等。

 

在一个多小时的交流中,两位老师深入的解答了网友们的提问。以下是聊天实录,51CTO.com略有整理。

 

.一、NET仅仅是一门新兴语言吗?

 

51CTO.com记者:才刚刚开始就已经有很多网友迫不及待的在向两位老师提出自己的问题了。为了大家更好的梳理知识点,我们在讲ASP.NET之前先来明确一个重要概念什么是.NET?能否请荣耀老师老师和方兵老师老师给我们一个具体的描述?

荣耀老师:我来谈一下看法:一个非技术的回答是:过去和未来若干年内决定微软在企业应用开发领域的命运的东西。幸运的是,微软成功了!

从技术人员的角度来说,.NET最重要的技术组成包括两大块:.NET FrameworkVisual Studio,前者包括通用语言运行时(Common Language RuntimeCLR)和.NET框架类库,后者则是创建 .NET框架应用程序的主流开发工具。

方兵老师:早期的时候,.NET的概念比较庞杂,包括了操作系统、服务器软件、微软的服务、开发技术等等,现在来说,.NET应该就是微软的开发平台。

 

51CTO.com记者:那么我们在开发时所用到的如vb.net、C#又都是些什么呢?难道不是编程语言吗?

荣耀老师.NET支持多种编程语言,它们都是其中的一种。如果你是.NET新手,此前对语言无特别的偏好,优先选学C#语言,它专为.NET量身定制。

方兵老师VB.NET//C#等等都是编程语言,适用不同的开发人员,微软的思路和Java是不同的。

 

51CTO.com记者:这是一个很全面的回答。我注意到,微软在给.NET下定义的时候用到了一个很关键的词:平台。(注:微软给出的.NET官方解释:Microsoft.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。)这与以往我们所熟悉的编程语言会有什么样的联系和区别?

荣耀老师:首先,.NET是一种技术平台,与编程语言不是同一个范畴的概念。其次,这个概念我认为有点过时了,至少不够贴切。

方兵老师Microsoft正在趋向于将.NET看作一个系统。在表面下,它包含了两种不同的编程模型:一个是Web服务编程模型,另一个是系统编程模型。Microsoft 开始把.NET系统编程模型作为.NET整体的一个组成部分。计划最终以此代替现有的组件对象模型(Component Object ModelCOM)以及Windows应用程序编程接口(APIs),这个由WCFWPF等组成的模型使用一系列新的基础类。

51CTO.com记者:看来它与我们所说的编程语言完全不同。

方兵老师:是的,编程语言应该说是构建.NET这样一个庞大的平台的工具,仅仅是工具而已。

 

51CTO.com记者:.NET中涉及到了.net framework,它是与.NET一起发布的么?

荣耀老师:那是肯定的,它是.NET技术平台的基础。

方兵老师:基本上是这样子的,每一次.NET技术的进步都会伴随着.net framework一个新版本的发布。

 

51CTO.com记者:那么据我所知现在的最新版本已经发展到了3.5,刚才有网友也在问,它与之前的2.0版本有什么特别大的提高和优化么?

荣耀老师:与.NET Framework 2.0相比,.NET Framework 3.0增加了WF Windows Workflow Foundation)、WPF(Windows Presentation Foundation)WCFCommunication Foundation)以及WCS(Windows CardSpace)等。WCF是一种新型的面向服务的通用通信方式,可以取代对Web Services.NET Remoting等多种不同通信技术的使用。WF为基于工作流的应用开发提供了通用途径。WPF为桌面客户端和浏览器客户端提供了通用基础,允许界面设计者与代码编写者分工协作,可以开发出支持二维或三维图形、视频、动画以及各种类型的文档的新风格用户界面。WCS使用不同的信息卡(information card)来标识用户的数字身份,消除了传统用户名+密码身份鉴别方式的弊端。

.NET Framework 3.5则在.NET Framework 3.0基础上扩充了.NET 基础类库,并进一步完善了WPFWF以及WCF,更重要的是,它向C#VB中增加了LINQ(Language-Integrated Query)等重要的语言特性。LINQ为不同种类的数据(DBMSXML以及内存中的对象)提供了通用的存取方式。由于新型Web应用越来越多地采用AJAX风格,.NET Framework 3.5直接集成了ASP.NET AJAX,开发者使用Visual Studio 2008可以非常方便地构建AJAX风格的Web应用。

方兵老师:比如说,从前我们很少做O/R,因为对象查询的技术限制,做了O/R之后对集合的查询和排序几乎成为不可能。在.NET 3.5中引入了LINQ,语言集成查询,那么我们就可以非常方便的做O/R,可以说,这是.NET 3.5中最激动人心的特性。

 

51CTO.com记者:对WPF(Windows Presentation Foundation)这个概念能否重申一下?概念听起来可能不太形象。

方兵老师:通俗的说就是用来取代C++时代的函数指针。字面上的意思是Windows展示基础,是Windows下一代的显示技术,基于Drect X构建。

 

51CTO.com记者:那也就是说,我们可以直接学习3.0以上的技术来代替学习2.0了?是这样的吗?

荣耀老师.NET Framework 3.5.NET Framework 3.0.NET Framework 2.0CLR是一致的,而且.NET Framework 2.0提供的ASP.NET 仍然是创建浏览器应用的基础,ASP.NET Web Services也仍然是开发者乐于使用的技术(虽然微软更推荐使用WCF)。是的,在.NET Framework 3.5世界,自.NET Framework 2.0起提供的ASP.NET及相关技术仍然是Web应用开发者所必须掌握的工具。

方兵老师:也并不是这样,因为.NET 3.5.NET 2.0的一个扩展,它有相当多的技术是构建在.NET 2.0之上的。

 

51CTO.com记者:有网友问:.net开发出来的程序,现在还需要安装.NET Framework才能运行吗?每次安装一个.net framework的新版本时,是不是要先删除旧的版本呢?

方兵老师.net开发出来的程序是需要安装.net Framework才能运行的,但是现在基本上都在Windows安装或者更新的时候被安装上了。安装.net framework新版本的时候不需要卸载旧版本。

荣耀老师:如果开发ASP.NET应用,服务端需要安装,客户端不用安装,这是许多初学者容易误解的问题。安装新版.net framework时,不需要先删除旧的版本。

方兵老师:而且在.net 3.5 sp1之后,新的客户端应用程序将支持一种新的部署方式,这种部署方式不需要客户端安装完整的.net framework

 

二、项目开发中巧遇新技术,用还是不用?

 

51CTO.com记者:解决了以上的问题我们脑中应该会有一个清晰的思路了,做为.NET框架中很重要的组成部分ASP.NET究竟会给我们带来什么新的内容?它与ASP语言仅仅是继承和发展的关系么?他们的最大区别是什么呢?

荣耀老师:是这样的,我在我的下一本书中会比较详细地谈一下这个问题。

方兵老师ASP现在被从头到脚地重建了,结果就是ASP.NET。它并不只是ASP 4.0,它是一个用于 Web开发的全新框架,其中包含了许多新的特性。ASP.NET提供了更易于编写、结构更清晰的代码,这些代码很容易进行再利用和共享;ASP.NET使用编译后的语言,从而提升性能和伸缩性;ASP.NET使用Web表单使开发更直观,利用面向对象技术促进组件的再利用。另外,ASP.NET中还包括有页面事件、Web控件、缓冲技术以及服务器控件和对数据捆绑的改进。供 ASP.NET使用的库以及在Microsoft.NET框架中允许通过Web 使用客户商用函数,为程序员提供了更多新的开发机会。

ASP.NET使代码更加干净。现有的ASP 应用程序中,不管你将它们写得怎么样,结构总是充满了长长短短的代码。而ASP.NET的代码不仅更容易编写,而且更加干净整洁,比ASP代码更易于阅读。同时,ASP.NET代码的结构方式提高了其再利用性和共享性。

ASP.NET 改进了配置、伸缩性、安全性和可靠性。对于简单的ASP应用程序,配置其实并不算什么问题,但是当你移植到一个利用组件的N层结构中时就会遇到问题。当你对这些应用程序进行配置和维护时,DLL 陷阱问题(组件注册、版本、锁定的DLL等等)就会出现。ASP.NET中则取消了组件注册以及DLL锁定,全面使用了XML配置文件,从而解决了这个问题。这样你只需要执行复制文件的工作就能配置一个Web应用程序。

ASP.NET对各种不同的浏览器提供了更好的支持。对于ASP开发人员来说,浏览器兼容问题好像是一个永恒的问题。你或者为低一级的浏览器编写代码,例如用HTML 3.2,或者限制页面的浏览范围。无线应用程序协议WAP设备的引入还会深化这个问题。

ASP.NET 造就了一类新的Web应用程序。目前的Web应用程序通常都是同一种模式:一套线性应用程序,然后将逻辑植入其中之一。ASP.NET允许开发人员打破这种单一模式,创造出更加动态而且伸缩性更强的应用程序,这种应用程序能够更好地满足公司的商业需求,并提供一个更加丰富的开发环境。

 

51CTO.com记者:那么是否可以这样说,ASP.NET是.NET平台的一个不可或缺的部分?

方兵老师:是的,在目前看来,你甚至可以看作它是.NET的主要部分,因为除了ASP.NET之外的其他部分目前应用还不是很广泛。

荣耀老师:是的,可能是.NET平台应用最广泛的一部分。

 

51CTO.com记者:好的。提到ASP.NET的学习,我们就不得不提到微软提供的开发工具VS 2005或者VS 2008,已经有网友对这方面提出了很多的问题。

荣耀老师:我所了解到的国内许多公司仍然使用VS2005+ASP.NET 2.0进行企业应用开发,毕竟VS2008的中文版和ASP.NET 3.5发布的时间并不长。

方兵老师:我目前在中石油的一个软件项目中担任项目经理,我们已经开始使用VS2008进行大规模的开发。

实际上目前我们已经开始在使用SilverLight 2.0进行小范围的尝试,今年年中.net 3.5 SP1发布后,我们就将采用动态数据技术来构建ASP.NET应用程序。

51CTO.com记者:在这个问题上两位好像意见不完全统一,这是否与实际开发的项目有关?哪类的项目较为适合应用比较新兴的技术呢?

 

51CTO.com记者:刚才方老师所提到的SilverLight 2.0,这又是怎样一个概念呢?

方兵老师SilverLight是基于.NET中的WPF技术的一项界面呈现技术,你可以认为是微软用来和AdobeFlash竞争的东西。

 

51CTO.com记者:有位网友可能是在实际中遇到了问题。他说:vs2003的自动调试功能如何有什么方法可以彻底关闭掉,我在电脑的"服务"里面已经关闭掉了.但是我一浏览有些访问速度慢的网站,vs2003的自动调试就"蹦出来"根本不要我通过.所以很多网站看不了.不知道我说的是否清楚。能否帮助解决下?

方兵老师:这个你可以在Internet选项中将调试选项关闭,它以后就不会再来烦你了

51CTO.com记者:看来行家一伸手,问题就轻松解决了。可是这位朋友还是遇到了问题,他在问是否与他使用的winxp系统有关?

 

51CTO.com记者:在实战中,还真是问题多多,各个方面的都有。对于网友提到的反射技术我好像也还是第一次听说,能不能详细的给我们描述一下?

方兵老师:反射这种东西比较复杂,简单来说,是通过该技术让.net对象自己告诉我们它是什么,有些什么,如何使用等等信息

荣耀老师:因为Web服务器返回给用户浏览器的总是HTML以及JavaScript等。

方兵老师:例如ASP.NET中的GridView绑定数据的数据绑定列就是反射技术的一种典型应用

51CTO.com记者:听起来这倒是对大家很有帮助的东西。

荣耀老师:反射的细节问题最好找一些资料看一看,然后写一些小程序,可以加深了解。

方兵老师:还有我们将在ASP.NET 3.5 SP1中将看到动态数据这种奇妙的应用,它也是通过大量使用反射来实现的。

 

51CTO.com记者:那什么又是委托技术与设计模式实现呢?看来大家对ASP.NET中的概念有很多还不太清楚。

方兵老师:委托就是让程序根据参数调用某个在设计时未知的方法。

荣耀老师:委托和设计模式可能用一两句话说不清楚。委托可以认为是类型安全的函数指针,是事件处理机制的实现基础。

方兵老师:设计模式这种东西,我的理解是,一些经过经验证明有效的解决问题的方法而已,并不是必须要严格遵循的条条框框。正如有一句话说,世上是本没有路的,走的人多了,也就成了路,设计模式是人们已经踩出来的那几十条路。

 

三、学习ASP.NET的捷径

 

51CTO.com记者:说了这么多,我的一个最大的感觉,要想学好ASP.NET需要学习和使用的东西还真多。能不能给我们大体把握一下:针对于种类繁多的内容我们该如何取舍?哪些是我们在学习过程中必须使用的?也给大家的学习指导一个方向。

或者说要想学习ASP.NET我们需要做好多少准备工作?学习哪些技术或者明确哪些概念?

方兵老师C#不仅能够实现Windows桌面程序,还能够编写Windows服务、Windows Mobile手持设备程序、XBox游戏甚至智能手表程序。

荣耀老师:对于基本概念的掌握是先决条件,新手学习ASP.NET的参考路径:数据绑定控件、ADO.NET(更灵活的数据操纵)、XMLWeb Service……系统架构设计。ASP.NET多用来开发操纵数据的动态网站,此前还应了解关系型数据库的概念,并至少掌握一种数据库产品。还有XML处理技术。XML不但作为传输的介质,还可以作为存储介质,它还是模块之间的理想的接口,职业ASP.NET开发人员都知道对XML的使用甚至可能比关系数据库更多。

 

51CTO.com记者:怎样有效组织需要学习的这些部分成为一个有机的综合体让自己开发的程序动起来呢?这可能对于初学者意义重大。

方兵老师:我想你可以考虑做一个类似网上商店的这样的网站,因为这类面向公众的电子商务网站所需要的用户体验比较丰富,需要实现的功能也会比较多,比如用户登录、商品搜索和呈现,以及购物车、订单管理、评价等等,这样我们可以构筑一个麻雀虽小、五脏俱全的站点模型,在通过对该站点不断地开发和重构,从而可以了解到ASP.NET的方方面面。

51CTO.com记者:方老师给出了一个很有效的模型,大家可以在这个问题上边实践边学习。

 

51CTO.com记者:很多号称10天学会ASP.NET的网络教程,听起来很是诱人。看来可行性不大吧?

方兵老师:快速成长的捷径,确切地说,应该是没有,但是有一些方法可以能够让程序员成长得更快一些,多积累、多思考、保持对新技术的兴趣是非常重要的,同时还要多看看别人是怎样写程序的,并且在看过别人怎样写之后一定要记得自己动手做一做,否则永远都只能是别人在做,自己不会的永远都不会。还有就是学会把复杂的问题分解为若干个简单的问题,把不会的大东西分解为若干个不会的小东西,然后逐一解决,这样就能够比较快的成长了。我曾经见过有的实习生,我在给他们讲课的时候,很认真地听,也很认真地在看我给出的范例代码,但是叫他们自己写一个小程序,就是不见动手,问为什么不动手,回答是不会,再问哪不会了,回答是不知道哪不会。这就是因为不爱动脑子思考(或许是其实没有兴趣,只是为了在就业压力这么大的今天找份工作才选择了编程),不知道将不会的大问题分解为若干个不会的小问题。

荣耀老师:捷径是否存在是个敏感的话题,一些专家不屑于捷径说,另有一些专家则认为存在一步登天的捷径

我认为任何一门技术的学习都有窍门,每一门技术都有其内在的学习规律,掌握了正确的学习路线,可以少走弯路,尽快上手。

对于ASP.NET而言,首先是理解概念(可以阅读我的《.NET 大局观》(第2版)),然后是掌握一门.NET语言(我推荐C#)和Visual Studio开发工具,当然还有关系型数据库和XML。通过ADO.NET灵活地访问数据库。这些都是最起码要掌握的。这是对初学者而言。

对于职业程序员而言,面向对象、重构、设计模式、组件设计、SOA、系统架构都是需要(逐渐)掌握的。

方兵老师:积累很重要,我们建议开发人员最好编写自己的编程日记,将自己开发中的心得记下来,这样,在今后再遇见类似问题的时候便能够比较快的解决。

后就是注意要多思考,我不提倡程序员就是不停的动手指头写代码,我一直以来有一句话是崇尚懒的原则,不是说让人真的变懒,而是希望程序员懒得去动手指头,而是多用脑子思考如何能够让自己少动手指头,比如说如何设计模块从而用更少的代码实现更强大的功能。

保持对新技术的兴趣,这个新技术不一定是指新出现的技术,自己不熟悉还未使用过的技术也应该算作新技术。对每一种新技术,我们都应该去了解,这项新技术有什么用?怎样用?有什么好处?为什么会出现这项新技术?等等。例如,我们在ASP.NET 1.0中绑定习惯了使用Datasource属性设置数据源并且调用DataBind方法绑定数据的方式,但是在ASP.NET 2.0中新出现了数据源控件,那么我们就应当去思考与之相关的一系列问题,然后就会发现自己喜欢上了这些控件,而不是从来没有用过或者说简单的试用了一下之后觉得似乎不好用就放弃了,那样的话你的技术能力可能永远都无法得到提高。因为经验和统计证明,一项新技术出现,当我们觉得不好用的时候,十之八九其实是因为我们还不会正确的使用它。

 

51CTO.com记者:这些建议对大家说实在是太宝贵了,它可能对大家的学习有着指导性的作用。让大家少走不少弯路。

荣耀老师:对于新手,我还要强调从一开始就养成良好的编码风格,在你今后的开发生涯中将会从中受益多多。

51CTO.com记者:不错,这个对于一个程序员来说是尤其重要的。

 

51CTO.com记者:好像大家对两位老师的著作很有兴趣,目前两位老师有出书的打算么?

荣耀老师:有写作《ASP.NET 3.5实战起步》的计划,但我还要观察3.5这个版本和VS 2008是不是一个过渡性的东西。

方兵老师:除了现有的这本关于ASP.NET2.0的书之外,我可能会在下半年再推出一本关于ASP.NET 3.5 SP1的书,里面会包含LINQ To Entities、动态数据、MVC等方面的内容,书名暂定《ASP.NET 3.5快速开发平台技术探秘》。

因为目前的ASP.NET 3.5我认为新东西不是很多,所以年初机械工业出版社让我出,我觉得最好还是等等再写比较好。

51CTO.com记者3.5确实还很新,可能需要一段时间来检验,也需要更多的像两位老师这样的高手给大家提供思路,让大家也在不断的实践中进步。多看这方面的书籍对大家的学习是会起到事半功倍的效果的。

荣耀老师:一些业界的公司给我的反馈是不会在短时间内过渡到ASP.NET 3.5,毕竟公司项目开发不是赶时髦。但是,作为技术作者和学习者来说,最新的东西总是令人兴奋的。

还是对于初学者,刚才方老师也说了,学习的好方法是做小项目,自己可以假定一个小项目,随着知识和经验的积累,不断地回头重构和完善之前开发的项目。

方兵老师:实际上,业界短时间内不会过渡到.NET 3.5,人员技术能力的升级成本是主要制约点

荣耀老师:在重构和完善之前开发的项目的过程中会学到很多东西,因为这个过程是学习不断深入的过程,不断提高的过程。

方兵老师:我目前的团队因为对于新技术的接受度比较高,所以我们在技术的选型上也会相对比较靠前一些。

51CTO.com记者:新技术的推广可能需要过程,大家刚好也可以在这个阶段多学习,多增长见识,让自己的技术水平有快速的增长。

51CTO.com记者:祝愿两位老师的大作能尽快出版,我们今天的聊天就告一段落了。最后,感谢两位老师,感谢大家的积极参与。

 

 

互动网购买:http://www.china-pub.com/37802

当当网购买:http://product.dangdang.com/product.aspx?product_id=20087528

互动网购买此书:http://www.china-pub.com/35927

当当网购买此书:http://product.dangdang.com/product.aspx?product_id=20014110

活动时间:5.20 14:00-15:20

活动地点:51CTO专家聊天室

嘉宾:荣耀、方兵

相关文章:

  • 邱郁惠--开源StarUML建模实战 技术讲座
  • 看雪论坛 第一届软件设计大赛
  • 邱郁惠开源StarUML建模实战录音和纪灯下载
  • 自由软件之父Richard Stallman 中国行圆满结束
  • 作为一个Flash平台开发/设计者应该拥有的10本书
  • IT 开发者,我们一起在行动
  • 《Ajax构建工具箱指南》随书光盘使用说明
  • 开源StarUML建模实战 在线专家门诊实录
  • 又到一年面试高峰期--面试总结
  • suningin华为招聘--前人经验
  • 俞黎敏与JAVA脚本编程
  • 与Thoughtworks 第三届敏捷软件大会同行
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • Solaris 应用程序设计——孙勇
  • 互动网8周年店庆,诚邀各CSDN会员参加
  • [NodeJS] 关于Buffer
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • GraphQL学习过程应该是这样的
  • JavaScript HTML DOM
  • Javascript 原型链
  • Java到底能干嘛?
  • js
  • Js基础——数据类型之Null和Undefined
  • Odoo domain写法及运用
  • php面试题 汇集2
  • Python3爬取英雄联盟英雄皮肤大图
  • Python利用正则抓取网页内容保存到本地
  • webpack4 一点通
  • 阿里研究院入选中国企业智库系统影响力榜
  • 第十八天-企业应用架构模式-基本模式
  • 记录:CentOS7.2配置LNMP环境记录
  • 通过git安装npm私有模块
  • 微信公众号开发小记——5.python微信红包
  • 一道面试题引发的“血案”
  • 智能合约开发环境搭建及Hello World合约
  • ​​​​​​​​​​​​​​Γ函数
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • (3)llvm ir转换过程
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (zt)最盛行的警世狂言(爆笑)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转载)(官方)UE4--图像编程----着色器开发
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .gitattributes 文件
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET : 在VS2008中计算代码度量值
  • .NET Core引入性能分析引导优化
  • .NET Project Open Day(2011.11.13)
  • .net web项目 调用webService