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.狀態管理
本人水平實在有限,請給位貼友多多指教。有什麼好的想法都請貼出來。