Dim MyToolbox Set MyToolbox = New CToolbox Response.Write "UserName: " MyToolbox.UserName "BR>" vbCrLf Response.Write "UserPhone: " MyToolbox.UserPhone "BR>" vbCrLf Set MyToolbox = Nothing
Class CToolbox Private m_conn, m_rs Private m_username, m_userphone
Public Property Get UserName() UserName = m_username End Property
Public Property Get UserPhone() UserPhone = m_userphone End Property
Private Sub Class_Initialize() Set m_conn = Server.CreateObject("ADODB.Connection") m_conn.ConnectionString = "Some connection string" m_conn.Open Set m_rs = Server.CreateObject("ADODB.Recordset") Set m_rs.ActiveConnection = m_conn m_rs.Open "Select * FROM Users Where userid = '" Request.ServerVariables("LOGON_USER") "'" If Not m_rs.EOF Then m_username = m_rs.Fields("username") m_userphone = m_rs.Fields("userphone") End If End Sub
Private Sub Class_Terminate() On Error Resume Next m_rs.Close Set m_rs = Nothing m_conn.Close Set m_conn = Nothing End Sub
End Class
從例子中你可以看到,UserName 和 UserPhone 屬性在類初始化之后就會有值。你可以將這個類的代碼放到 ASP 代碼的最后。然后在其余的代碼中其功能就可以在使用,不用實例化ADO對象,進行數據庫調用和之后的清理。而且,如果你使用的是 Microsoft Visual InterDev,那么類中定義的屬性和方法可以通過智能感知(IntelliSense)使用。
智能感知只對一級屬性和方法有效,所以如果你創建一個類返回其它 ASP 類的對象,那么 InterDev 就不會提供可用的方法和屬性。
下面的代碼是一個類的骨架:
Class MyClass
Private Sub Class_Initialize() End Sub
Private Sub Class_Terminate() End Sub
End Class
使用這個基本信息,一個類被聲明,并且可以使用它來創建對象。但是這個類的對象沒有功能——它們是無用的東西。類的方法從 Public Sub 或者 Public Function 聲明構建(Subs 沒有返回值,而 Function 有返回值)。
有兩個方法可以暴露屬性:既可以在類的全局上下文中使用 Public VarName,也可以使用 Public Property Get/Set/Let。如果你需要一個只讀屬性,那么只要簡單地使用一個 Property Get 聲明即可。所有其它聲明為 Private 的 Properties,Subs 或者 Functions 只有在實例化的對象才可用。在類的全局上下文中聲明為 Private 的變量是成員變量。
創建類的另外一個好處是你可以輕易的將這個類聲明移值到 Web 服務中。因為這是很多開發人員前進的方向,你可以通過使用類創建面向對象的代碼先行一步。當你移值這些類聲明到一個 Web 服務時,你不需要重寫所有的放置了那段代碼的ASP代碼。所要做的唯一的改變就是你的對象的實例化。
我發現創建這個抽象的最大的優點是可以使用其它 Web 開發者的幫助。因為對于很多開發人員來說在每個不同的實現中重復創建相同的代碼效率相當低,所以這個方法為每個開發人員提供了一個抽象工具。這就允許每個開發人員將精力更多地集中在當前工作的功能上面,而不是花費時間重寫他們已經開發過的代碼上面。
如果你奇怪為什么我不提供一個COM對象來處理這個功能,那是因為它會把你鎖定到細節設計中。通過在 ASP 中動態地創建類,你可以不用重新編譯和發布就能夠對類做出更改。在類固定之后,再將它移值到 COM、Windows 腳本組件(WSC)或者一個 Web 服務中,但是在開發階段還是靈活一些好。