初學編程的朋友往往喜歡收集一些很“奇妙”的編程技巧,然而,技巧的積累往往并沒有提高程序質量,反而引導一些編程者一味追求奇和新,忘記了基本編程習慣的培養,不利于團隊的合作,可能,這也是中國并不缺少聰明的程序員,但是缺少聰明的開發團隊的一個原因吧。在ASP.NET的開發中,可以學習的技巧不少,但是,一些基本的編程習慣我們一定要養成,這樣不但能根本上提高程序質量和開發效率,而且,也利于程序的閱讀和團隊開發。如果自己寫的程序只有自己可以看懂或者只有幾個人可以看懂,即使程序技巧神乎其技,對于程序的升級和維護都是致命問題。 一、 錯誤(以外)的處理 程序健壯性最基本要求就是程序錯誤的處理與捕捉,在ASP.NET中,錯誤的處理有和其他編程語言一樣的機制,可以使用Try…Catch…Finally等方式,這一點和ASP相比具有較大的進步。而且,使用這些錯誤處理方法,可以大大提高程序的可讀性和程序調試速度,在這幾個優勢結合的情況下,我們更加應該注意這一點。 關于錯誤的處理,我們可以參考這篇文章(英文): http://www.123aspx.com/redir.aspx?res=28336 二、 字符串的處理 網頁設計中,字符串的處理幾乎是最常見的了。使用ASP.NET以后,字符串的處理比ASP的速度快,而且,在ASP.NET中,專門增加一個字符串處理類StringBulider,使用這個類可以完成一些常見的字符串操作,而最主要的,使用StringBuilder可以大大提高字符串處理速度。 在ASP.NET中,最常見的就是使用“&”來連接兩個字符串: Dim myOutputString As String = "My name is" Dim myInputString As String = " Alex" myOutputString = myOutputString & myInputString Response.Write(myoutputString) 現在,我們來看看StringBuilder的使用,在使用StringBuilder的時候,我們對字符串可以做一些基本的操作,比如Append、Replace、Insert、Remove等,現在我們來看具體舉例。 (1)StringBuilder中Append的使用 Append和其他語言的Append一樣,就是在字符串最后增加其他字符。 Dim sb as StringBuilder = New StringBuilder() sb.append( "<table border='1' width='80%'>" ) For i = 0 To RowCount - 1 sb.Append("<tr>") For k = 0 To ColCount - 1 sb.Append("<td>") sb.Append( dt.Rows(i).Item(k, DataRowVersion.Current).toString()) sb.Append( "</td>" ) Next sb.Append("<tr>") Next sb.Append( "</table>") Dim strOutput as String = sb.ToString() lblCompany.Text = strOutput 在以上的程序中,用Append方法實現了一個表格的輸出,需要注意的一點是,StringBulider必須首先使用ToString()方法將其轉化為String類型才可以直接輸出。在以上的舉例中,我們看到的全部是Append一個直接的字符串,其實,這個方法有一個很方便的功能,那就是可以直接Append其他類型的變量,比如可以直接Appemd一個Integer類型的數值,當然,我們輸出以后自動轉化為一個字符串: Sub Page_Load(Source As Object, E As EventArgs) Dim sb As System.Text.StringBuilder Dim varother As Integer varother=9999 sb =new System.Text.StringBuilder() sb.append("<font color='blue'>可以Append其他類型:</font>") sb.append(varother) Response.write(sb.toString()) End Sub (2)字符串中其他方法的使用 我們還可以使用其他方法,我們來看看常見的: Insert方法,可以在指定位置插入其他字符,使用方法:Insert(插入位置,插入字符); Remove方法,可以在指定位置刪除指定字數字符,使用方法:Remove(其實位置,字符數); Replace方法,可以替換指定字符,使用方法:replace(被替換字符串,替換字符串) 字符串的具體介紹和使用方法可以參考以下文章(英文): http://aspfree.com/aspnet/stringbuilder.aspx http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemTextStringBuilderClassTopic.asp 三、 數據庫鏈接Connection和DataReader的關閉 在使用ASP編程的時候,我們就已經知道,在使用數據庫連接以后,一定要將連接關閉,然后設置為NoThing。在Asp.NET中,我們仍然需要這樣使用,不過,在ASP.NET中,由于使用了ADO.NET,所以,在一些相關的處理方面,實際還是有一些細微的區別,而這些區別,往往也就是我們設計的時候最需要注意的,F在,我們通過舉例,來看看在常見的ADO.NET操作中,需要注意哪些問題。 (1)舉例一 Dim myConnection As SqlConnection = new SqlConnection(ConfigurationSettings.AppSettings("DSN_pubs")) Dim myCommand As SqlCommand = new SqlCommand("Select pub_id, pub_name From publishers", myConnection) Dim myDataReader As SqlDataReader Try myConnection.Open() myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) DropDownList1.DataSource = myDataReader DropDownList1.DataBind() Catch myException As Exception Response.Write("An error has occurred: " & myException.ToString()) Finally If Not myDataReader Is Nothing Then '關閉DataReader myDataReader.Close() End If End Try 在以上的舉例中,我們注意到,這里只關閉了DataReader,并沒有關閉Connection。為什么呢?仔細觀察以上的ExecuteReader方法,原來,設置了ExecuteReader參數,當執行完ExecuteReader以后,會自動關閉Connection。所以,這樣設置以后,就沒有必要再手動關閉Connection了。 (2)舉例二 Dim myConnection As SqlConnection = new SqlConnection(ConfigurationSettings.AppSettings("DSN_pubs")) Dim myCommand As SqlCommand = new SqlCommand("Select pub_id, pub_name From publishers", myConnection) Try myConnection.Open() DropDownList1.DataSource = myCommand.ExecuteReader() DropDownList1.DataBind() Catch myException As Exception Response.Write("An error has occurred: " & myException.ToString()) Finally If Not myConnection Is Nothing AndAlso ((myConnection.State And ConnectionState.Open) = ConnectionState.Open) Then myConnection.Close() End If End Try 在以上的舉例中,我們發現,居然沒有關閉DataReader。為什么呢?其實上面的代碼中,沒有直接生成DataReader對象,當然也就無從關閉了。需要注意一點的是,在關閉Connection之前,程序首先判斷Connection是否已經打開,如果沒有打開,也就沒必要關閉了。 四、使用Web.Config/Maching.Config保存常用數據 一些數據我們需要時常使用,比如使用ADO.NET的時候,最常見的就是數據庫連接語句,在ASP中,我們常常將這些信息保存在Application中。當然,在ASP.NET中,也可以這樣,不過,ASP.NET已經提供一個配置文件WEB.Config,所以,我們最好將這些信息保存在WEB.Config中,當然,我們也可以保存在Machine.Config中,不過,這樣的話,整個網站都必須使用,所以,一般我們都使用Web.Config,F在,我們來看具體這個文件的使用。 (1)Web.Config文件的設置 首先,我們來看Web.Config的設置,我們在這個文件中增加設置以下兩個項目,設置如下: <configuration> <appsettings> <add key="dsn" value="myserver"/> <add key="someotherkey" value="somevalue"/> </appsettings> </configuration> (2)變量的使用 以上XML文件設置了dsn和someotherkey兩個變量,現在我們看看程序中怎樣使用: <html> <script language="VB" runat=server> Sub Page_Load(Sender as Object, E as EventArgs) Dim AppSettings as Hashtable = Context.GetConfig("appsettings") DSN.Text = AppSettings("dsn") SomeOther.Text = AppSettings("someotherkey") End Sub </script> <body> DSN Setting: <asp:label id="DSN" runat=server/> <br> Some Other Setting: <asp:label id="SomeOther" runat=server/> </body> </html> 上面的程序我們看到,使用這樣定義的變量很簡單也很方便。 五、使用.NET的方式調試程序 ASP程序的調試一直是編寫ASP最難的地方,這一點,ASP程序員大概都深有體會,因為大家都是使用Response.write來調試。而這樣調試最大的缺點是,當我們調試完畢,必須一個個來刪除或者注釋掉這些信息,想一想,如果程序代碼達到幾百行或者頁面很多的程序,這樣的工作是多么枯燥,最怕一點,忘記將這些調試用的write刪除,可能在用戶使用的時候就會出現一些不雅的調試信息。 使用ASP.NET以后,我們可以直接定義Trace來實現程序的調試。以上提到的麻煩可以輕松解決,熟悉,Trace可以通過具體頁面和在Web.Config配置文件中來定義實現,這樣,當程序調試完畢以后,直接將Trace設置為Off就可以了,這樣,程序就不會有調試功能了。 (1)頁面調試的實現 在一個具體的頁面需要實現調試功能的時候,我們可以這樣設置: <%@ Page Language="VB" Trace="True" %> (2)定義WEB.Config實現 在WEB.CONFIG中,我們也可以實現程序調試的打開: <configuration> <system.web> <trace enabled="true" requestLimit="10" localOnly="false"/> </system.web> </configuration> 使用以上的設置打開Trace以后,我們在具體的程序中就可以使用Trace來調試程序了,比如: Trace.Write("This is some custom debugging information") 或者調試程序變量: Trace.Write("This is is my variable and it's value is:" & myVariable.ToString()) 以上設置我們可以看出,在ASP.NET中,程序調試功能已經很方便簡單了,我們在程序設計中如果忽略這些特點,繼續采用ASP的思維來設計程序,那么我們的程序不但效率沒有提高,也增加了其他開發者合作的難度。 六、總結 以上的一些程序編寫習慣,我們可以慢慢養成,在程序設計的時候,不要太在意程序是否最簡潔靈活,對于一般開發者而言,程序規范化和可讀性可能比追求程序的靈活性更加重要。在互聯網資源越來越豐富的情況下,我們可以參考一些很規范的程序源代碼來學習,當然,最好的莫過于微軟自己的東西,我們可以參考以下網址:http://www.asp.net,關于更多的程序編寫問題,我們可以參考以下網址: http://www.gotdotnet.com/team/asp/ASP.NET%20Performance%20Tips%20and%20Tricks.aspx
|