ASP.NET技能提升纲要
我做了四年多软件开发,这四年多也是不断学习的过程。但仍时常觉得迷茫,自已到底学会了什么,能做些什么,还差多少?这些问题常困扰着我,没有答案。可能是因为我对整个知识体系没有系统的认识,当然也就不知道自己所处的位置了。
编写目的:
本文档不是一篇技术性文章。它只是通过对ASP.NET开发技术的知识点的划分、归类,为程序员(开发团队)
认识自身(开发团队)知识结构,找出自身知识结构(开发团队)不足,提高和完善程序员(开发团队)自身知识
结构提供参考。方便团队成员之间技术交流,有利于ASP.NET技能水平的提高。
基础知识
基础是ASP.NET程序开发人员必须具备的技能,它主要包含开发工具的使用,相关语言的语法。
一、开发工具
“工欲善其事,必先利其器.”,学习任何一门编程语言必先学习它的开发工具。ASP.NET的开发工具有
很多,小到记事本加命令行,大到Microsoft Visual Studio 2005集成开发(简称VS2005)。VS2005是目前最流
行、最强大、最简易的ASP.NET开发工具。学会用VS2005创建网站、新建网页、使用控件。
二、Html语法
Html语法。Html语法是编写网站程序必不可少的知识。建议参考文档 HTML教程
三、JavaScript语法
建议参考文档 JavaScript中文版 JavaScript实例讲解
四、C#语法
建议参考文档:MSDN
1、C#程序的一般结构Main()和命令行参数
2、数据类型、数组、字符串、表达式、运算符、关键字;
3、对象、类和结构
4、属性、索引器、委托、事件、泛型、迭代器、可为空的类型;
5、不安全的代码和指针、XML文档注释、应用程序域、集合类
6、异常、互操作性、线程、性能、反射、DLL、安全性;
五、ASP.NET基本概念
应用方向
ASP.NET的开发过程中会应用到很多知识点如:ADO.NET技术、Crystal Report、Office、智能设备、控件及DLL、序列化、
分布式等。开发人员可针对这些技术有计划地学习、研究。每位开发人员至少精通其中一到两个技术点,项目小组应该能够覆盖
所有这些技术点。这样即可保证项目的顺利进行,小组成员之间了可以相互交流,取长补短,共同进步。
工具和开源
工具和开源项目一样,都不是ASP.NET语言的一部分。它们的诞生往往是为了解决程序开发中某个、某些或某类复杂的、需要重复劳动的工作。
目前流行的ASP.NET辅助工具有很多,现将以下几种工具作为本小组ASP.NET程序开发的标准工具: CodeSmith
CodeSmith 是一种基于模板的代码生成工具,提高生产力。可以参考《Founder.Framework开发手册》中的介绍。
开源项目
Castle项目
Castle是一个开源项目,它是为了简化企业级Web应用程序开发项设计的。它提供了一系列
工具、综合其它开源项目,帮助你恰当地完成工作并减少代码量。
Microsoft Enterprise library
该企业库的设计思想是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题
如安全、日志、数据访问、配置管理等
Atlas(Ajax)
经验及约定
一、 HTML 层
HTML层最重要的是布局。
1.不要用绝对位置,如:
<!-- Do not do this. -->
<div id = idFindWhatLabel style = "position: absolute; left: 0.98em; top:1.2168em;width:4.8em;
height:1.2168em;">
2.使用相对位置
如表用:
<!-- 一个表的大小占据页面的整个宽度 -->
<table width = 100%>
层叠样式用:
<!-- Div元素大小占据页面宽和高的一半 -->
<div style =' height: expression(document.body.clientHeight / 2); width: expression(document.body
.clientWidth / 2); '>
3.每个控件都用单元格定位
二、 ASPX 文件
1.应确保用户看到的每个异常信息都是恰如其分的;
2.代码应该标有标准模型和可读的;
3.不必要的Html标记应该从.aspx文件中删除;
4.不必要的空格应该删除,因为它们增加了地方;
5.当JavaScript中使用了注释,应该使用服务器端注释替代客户端注释如:
6.Server side comments: <code> <% %></code>
7.Client side comments: <code> // <code> or <code> <!-- --> </code>
8.代码应该用且只用两个空格交错;
9.常常使用的页应该使用页缓存技术;
10.尽量避免包含.js 文件;
11.避免使用frames,因为它们是过时的,应使用include-files.
12.避免大量使用隐藏字段,它们占用带宽;
三、 代码隐藏、类文件
1.模块级的变量应该避免使用,因为它们不是线程安全的;
2.尽量使用StringBuilder替代字符串联接,StringBuilder初始化时最好设置大小。
如:<code> stringBuilder = new stringBuilder(500)</code>
3.变量初始化:变量应在使用的时候才初始化,定义时不初始化。
<code>
string strName = Nothing;
if(intId == 1)
{
strName = "Raghu";
}
</code>
4.释放对象:尽管.NET提供了垃圾回收功能,还是应该在对象使用完后显示释放,以减少程序的执行。
5.视图状态:它有很多缺点。首先,它增加传输的数据量。其次,序列化和反序列化时,它被传到服务器。
最后,它增加内存分配;
四、 性能
以下几方面可能导致性能上的"瓶径";
1.页面:
1.1 页面大小,页面大加重CPU负荷和网络带宽;
1.2 脚本程序应写入.js文件中,这样可以缓存在客户端;如:<script language = javascript
src = "scripts/myscript.js">
1.3 限制使用图片、图像;
1.4 避免控件的名字过长,一般在10个字符以内。
1.5 尽量使用缓冲;
1.6 使用Page.IsPostBack
1.7 使用客户端验证:客户端验证可以有效的减少连接服务器的次数。
2.数据绑定
数据绑定是经常用到的技术,如果处理效果不好,会经常出故障。可以考虑以下几个方面:
2.1 避免使用Page.DataBind.Page.DataBind递归调用每个控件的DataBind,处理效率低。
2.2 尽量少调用DataBinder.Eval方法。
3.字符串管理
3.1 使用Response.Write进行格式化输出;
3.2 使用StringBuilder进行大量字符串连接;
3.3 当编译普通控件时使用HtmlTextWriter
4.异常处理
4.1 首先要在Global.asax文件或代码隐藏文件中实现一个全局错误手柄。在这个句柄里应在数据库里
、系统事件日志、或日志文件里标明如下信息:
产生错误的页面名称;
调用堆栈信息;
异常名称和信息;
4.2 使用Try/Finally释放资源,如:
try
{
conn.Open();
...
}
finally
{
if(null!=conn)
conn.close;
}
4.3 写代码避免异常
下面是一些常的的避免异常的方法:
1) 检查null值
对可能为空的对象检查,确保使用时它不为空。这常发生在使用view state、session state、
application state 或者 cache 时。如:不要用下面的方式处理:
try {
loginid = Session["loginid"].ToString();
}
catch(Exception ex) {
Response.Redirect("login.aspx", false);
}
替代的,应该用如下代码:
if (Session["loginid"] != null)
{
loginid = Session["loginid"].ToString();
}
else
{
Response.Redirect("login.aspx", false);
}
2) 不要使用异常处理逻辑:
5.资源管理
6.设计考虑
7.缓存技术
7.1 在页中将静态数据与动大庆数据分离
[main.aspx]
<html>
<body>
<table>
<tr><td colspan=3>Application Header – Welcome John Smith</td></tr>
<tr><td>Menu</td><td>Dynamic Content</td><td>Advertisments</td></tr>
<tr><td colspan=3>Application Footer</td></tr>
</table>
</html>
你可以使用以下代码缓存这个页:
[main.aspx]
<%@ Register TagPrefix="app" TagName="header" src="header.ascx" %>
<%@ Register TagPrefix="app" TagName="menu" src="menu.ascx" %>
<%@ Register TagPrefix="app" TagName="advertisements"
src="advertisements.ascx" %>
<%@ Register TagPrefix="app" TagName="footer" src="footer.ascx" %>
<html>
<body>
<table>
<tr><td colspan=3><app:header runat=server /></td></tr>
<tr><td><app:menu runat=server /></td><td>Dynamic
Content</td><td><app:advertisements runat=server /></td></tr>
<tr><td colspan=3><app:footer runat=server /></td></tr>
</table>
</html>
[header.ascx]
<%@Control %>
Application Header – Welcome <% GetName() %>
[menu.ascx]
<%@Control %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
Menu
[advertisements.ascx]
<%@Control %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
Advertisements
[footer.ascx]
<%@Control %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
Footer
7.2 缓存正确的数据
8.状态管理
本人水平实在有限,请给位贴友多多指教。有什么好的想法都请贴出来。