330 likes | 563 Views
从 asp 到 asp.net. 郑海山 Email: Haishion AT xmu DOT edu DOT cn Homepage: http://dog.xmu.edu.cn. 从 asp 到 asp.net. Asp.net 的新特点 Asp.net 开发实践 网络资源 值得阅读的几个源代码. 开始 asp.net 开发.
E N D
从asp到asp.net 郑海山 Email: Haishion AT xmu DOT edu DOT cnHomepage: http://dog.xmu.edu.cn
从asp到asp.net • Asp.net的新特点 • Asp.net开发实践 • 网络资源 • 值得阅读的几个源代码
开始asp.net开发 • 系统升级了.net framework后不会影响原来的asp程序。从asp升级到asp.net很简单,只需到windowsupdate更新.net framework即可。或者自己下载安装。所以你可以尝试搭建起支持asp.net的服务器环境,编写一些asp.net程序。对于提供虚拟主机服务的主机,在没有解决安全问题前最好不要升级到asp.net。 • 学习时最好到图书馆去借或者买一本书籍,随便什么书都可以,作为入门和手册。 • 下面列出的一部分新特点是我自己总结出来的,asp.net的新特点决不仅仅这些,需要大家自己挖掘。我这里仅列出asp.net相对于asp的一些新特点,关于asp.net本身语法、类库等东西需要自行查询书籍,这种东西只要能查得到,就无需记忆。如发现本ppt有任何错误,请一定写信告诉我咳咳。
Asp.net的新特点 • 代码逻辑和显示页面分离 • 多项目开发 • 系统可测性提高 • 编译运行 • 真正的面向对象的语言 • 类Windows应用程序的开发模式 • 缓存 • 用户控件 • 验证组件 • 零部署
代码逻辑和显示页面分离 Asp时代的做法 整个文件包括程序和美工,文件从第一行到最后一行html标签和<% %>代码混杂,一般的开发步骤是程序员先写代码,美工根据纯文本框架的页面或者与程序员商量好的布局设计页面,最后由程序员套入程序。 美工更新非常麻烦,基本上必须重新套一次页面。
代码逻辑和显示页面分离 Asp.net的Code Behind技术 通过2个文件分离代码和美工。比如一个cb.aspx,一个cb.cs,cb.aspx里面是美工,cb.aspx.cs是代码逻辑,两者通过cb.aspx第一行的Page指令关联。<%@Page Src=“cb.aspx.cs” Inherits=“cbClass”%> Src属性指定了cb.aspx对应的Code Behind文件,Inherits指定了类名,一个cb.aspx.cs文件里面可以放入多个类,一般都只放一个类。 好处:程序员无需担心代码被美工人员覆盖。美工和程序员工作可以并行。只需替换aspx文件,整个页面的美工、布局、排版就变化了。 更新的asp.net将采用Code Beside技术。
多项目开发 Asp时代 我们可以使用文本编辑器比如EditPlus编写asp文件,方便快捷,基本上编写的asp只能用来在iis里面运行,不能用作其他用途。如果想在应用程序和web应用程序之间共享代码,只能采用ActiveX技术。通过在服务器运行regsrv32注册组件。增加了部署的难度。
多项目开发 Asp.net的多项目开发asp.net我们已经不推荐再用EditPlus编写代码了,使用Vs.Net 2003可以极大提高编码速度。 在Vs.Net内你可以新建一个Solution,里面有多个Project,通过把整个Web应用程序分层,每个层建立一个Project。比如分为常用的3层结构:业务逻辑层,数据访问层和表现层,如果系统足够复杂,可以再把业务逻辑层分离出一个Component层等等。
多项目开发 • Dottext的多项目 通过分层分Project,如果今后版本需要提供PDA访问的版本,只需在解决方案内再加入PDA的显示层,核心代码不用重新改写。
系统可测性提高 • Asp几乎无法写单元测试代码 • Asp.net通过分层可以对业务逻辑层和数据访问层进行测试,Web表现层必须运行在.net framework下,不可测或很难测。
单元测试 • 什么是单元测试? 单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 测试方法有多种,包括白盒测试,黑盒测试,集成测试,验收测试等等,单元测试是最基本的。
单元测试 • 单元测试保证代码质量Q: 如果你写了一个函数int add_x_and_y(int x, int y),你如何测试这个函数确实是正确的?A: 通过今后的函数调用并运行,用眼睛观察其正确性。如果结果是对的,我就忽略他,认为这个函数行为是正确的,如果结果错误,我会去调试他。Q: 如果你只负责写函数,调用是别人的事,你如何测试他的正确性?Q: 如何重用测试代码?
单元测试 • 引入单元测试 通过写一段代码if (5 != add_x_and_y(2, 3)) { error(“add_x_and_y error.”);}//其他判断 保留这段代码,在每次函数重新修改后运行他,如果没有打印错误,则认为函数的行为没有改变。
单元测试 • Asp.net的单元测试 通过安装NUnit测试框架,配合NUnitAddIn和VS.net集成,使asp.net的单元测试变得非常方便。对每个类的关键方法编写单元测试代码,每次修改完源代码后运行测试。NUnitAddIn很好得把NUnit集成入Vs.net,在源代码窗口点击右键即可运行测试。可单独运行某个测试,可运行所有测试。如果测试通不过,可以立刻定位到通不过测试的行。
Web测试 • Web行为的测试可以使用NUnitAsp,通过提交数据,抓取网页链接,判断网页内的控件的属性值来确定网页是否按原设计运行着。这个测试比较麻烦,只需对几个关键行为进行测试。
编译运行 • asp是解释型,每次访问某个页面时系统均调入asp源代码解释运行。 • Asp.net是编译运行,系统启动后第一次访问某个页面时系统编译该页面,并运行。下次访问该页面时只需直接调用内存内的二进制代码。加快了调用速度。
编译运行 • 由于引入了Microsoft Intermediate Language (MSIL)概念,你可以使用c#,c++,vbscript,java,pascal等语法编写asp.net应用程序。 • 给客户提交的是二进制文件,从一定程度上保护了源代码。
真正的面向对象的语言 • Asp是伪面向对象语言。 • Asp.net是真正的面向对象的语言,支持继承、多态、封装等特性。
类Windows应用程序的开发模式 • Asp所有的操作都必须程序员自行控制(有些程序员就喜欢这样。。。),比如你点击了一个按钮,你必须在客户端使用javascript给某个hidden input赋值,并在服务端根据这个值判断是按了哪个按钮。客户端 <input type=button value=“增加”onclick=“form1.Action.value = ‘ADD’;form1.submit();”> <input type=button value=“修改”onclick=“form1.Action.value = ‘MODIFY’;form1.submit();”> <input type=button value=“删除”onclick=“form1.Action.value = ‘DELETE’;form1.submit();”>服务端If (“ADD” == Request(“Action”)) Then //addElse If (“MODIFY” == Request(“Action”)) Then //modifyElse If (“DELETE” == Request(“Action”)) Then //deleteEnd If
类Windows应用程序的开发模式 • Asp.net有事件驱动的感觉在.aspx里写入<asp:button text=“增加”onclick=“AddClick” runat=“server”/>在.aspx.cs里写入void AddClick(Object sender, EventArgs e) { //add}用户在IE内点击了增加,则页面自动Postback并执行AddClick这个函数。代码逻辑结构清晰。这些同样适用于CheckBoxList,Combo等等服务器组件。
缓存 • Asp基本上很少人使用缓存或者我不知道。一般只能通过调整数据库的参数等设置来提高性能。 • Asp.net引入了缓存的概念,可以对某个页进行缓存,对某个页的某些参数进行缓存,可对控件进行缓存,对数据进行缓存。对页进行缓存:test.asp?a=1&b=1,在缓存时间内test.asp?a=2&b=2页面结果一样。对页的某些参数缓存:test.asp?uid=1&day=1,对uid进行缓存,则test.asp?uid=1&day=1和test.asp?uid=1&day=2在缓存时间内结果一样。只关注这个参数的改变情况。对数据进行缓存:Cache(“OnLineUser”) = OnLineUser,则OnLineUser这个数组被缓存。
用户控件 • Asp对于一些重复使用的功能一般使用include或者使用函数。比如登录筐,页眉,页角,使用include的方法是:<!--#Include File=“Header.asp”--> //something <!--#Include File=“Footer.asp”-->使用函数的方法是:<!--#Include File=“Interface.asp”-->在使用时Header(title) Footer() • Asp.net引入了用户自定义控件的概念,asp所采用的方法可以使用控件实现。如果编写过VB、Delphi程序的人应该对控件比较熟悉,使用控件,提高了代码的重用性,控件本身是个自包含的代码,对调用者透明。一般登录筐,功能导航条,广告,页眉,页角,行为一样的下拉筐,输入筐都可以包装成控件。
验证组件 • Asp时代 对于在添写表单时的输入检查,我们必须手动写javascrip来验证,比如验证不为空,验证为数字,验证2个输入值是否相同等等。如果有较为重要的输入信息,我们还必须在服务端也做相同的验证。
验证组件 • Asp.net提供了一系列的验证组件 包括RequireFieldValidator、CompareValidator、RangeValidator、RegularExpressionValidator 、CustomValidator、ValidationSummary调用方法:请输入名字:<asp:TextBox id=txt1 runat=server/>(*)<asp:RequireFieldValidator id=rfv1 ControlToValidate=txt1 runat=server/>这样asp.net就会自动在客户端和服务端验证这个输入筐。配合正则表达式RegularExpressionValidator,基本上可以完成大部分的验证。也可以采用CustomValidator,自己写客户端和服务端的验证代码。 好处:逻辑清晰。.net自动为你产生客户端脚本,你无需关心访问者是使用IE,NS,还是手机的浏览器。
零部署 • Asp.net无需注册组件,只需把dll文件放入Web Application目录,即可使用。 • Asp.net引入了web.config文件,所有配置信息均在web.config内。 • 从测试服务器到生产环境服务器的部署只需拷贝几个*.dll,几个*.config,一些*.aspx文件即可,无需其他操作。
开发实践 • 我目前总结大致的开发流程,根据你的项目的大小可以自由变化,有些东西可以细化,有些可以不采用。
开发实践 • 分析系统,对实体建模。建模可使用Visio,Rose,Together。 • 数据库建模。数据库建模可使用Vs.net,Visio,PowerDesign。 • 搭建源代码版本控制服务器,测试服务器,测试环境,交流系统,共享文档服务器等等。
开发实践 • 编码,保证质量。编译器选择warning all,不放过任何一个warning,即使你认为某段代码写得非常漂亮,也必须改掉。.net不同的文件可以采用不同的编程语言,一般推荐使用c#写代码。使用Visual Source Safe进行版本控制,VSS可集成入Vs.net。使用NUnit,NUnitAddin进行单元测试。使用fxCop进行自动代码审核。使用NAnt自动编译。
代码审核 • 代码审核是一项重要的代码质量保证方法。审核可以找出开发者自己未知的错误,可以防止开发者在代码中插入后门等等。如果有条件,可以2个2个编组互相审核对方的代码,一可以大致找到对方代码中的错误,二也可以参考对方编码的技巧,三通过阅读对方的代码,加深对整个系统模块的了解。 • fxCop是一个自动代码审核工具,可根据微软的建议:Design Guidelines for Class Library Developers对你所编写的代码进行审核,包括小到变量名大小写,类名,类组织等等。审核出来的结果不是错误,只是建议,如果你的代码能通过所有审核,那基本上就不会出现什么大的隐患了。fxCop还提供开发包,项目管理员也可以自己编写插件加入自己的规则,在整个项目组内执行。
开发实践 • 测试,部署。 编译,部署等等一系列动作最好都使用脚本完成,不管动作多么简单。使用脚本可以重用脚本,减少人为错误,减少对特定人员的依赖。 使用bug管理系统,比如bugzilla。简单的可以使用文本文件或者Excel进行bug管理。
网络资源 • MSDN China • Asp.net • WebLogs @ Asp.net • GotDotNet • MS 快速入门教材 • CSDN • 博客堂 • 对于本ppt有任何陌生的词语,请在google内查询相关资料。
值得阅读的几个源代码 • Dottext使用asp.net写的多人的blog系统,系统框架较复杂,可在对asp.net较为熟悉后阅读。 • IBuySpy quickstar推荐的源代码,说明如何使用新的 Microsoft .NET 框架和 ASP.NET 来生成功能全面的电子商务应用程序。它提供了典型购物应用程序的所有功能,包括产品搜索、购物车管理、用户登录和注册,甚至查看和编辑您自己的产品意见的能力。 • PetStore Implementing Sun‘s Java PetStore using Microsoft .NET,并对jsp和asp实现的PetStore在源代码行数,性能和可扩展性等地方进行了比较。当然结果是。。。 • nGallery用asp.net写的一个相册系统,后台可使用Sql或者Xml,可通过配置参数来实现访问不同的数据库,对研究DAL(数据访问层)如何用相同的代码来访问不同的数据库很有帮助。 • Xmlnuke一个开源的内容管理系统(Content management System),后台数据库采用Xml,学习如何在asp.net内使用Xml。
谢谢 郑海山Homepage: http://dog.xmu.edu.cn