• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    制作無狀態的ASP組件

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 11次 | 進入軟件測試論壇討論

    領測軟件測試網 一般我們在web或其它有關的無狀態應用中使用組件時,腳本運行完畢后我們都會丟失組件的所有參照。當然可以簡單地將組件的參照保存在會話(session )變量中,但這浪費資源。更聰明的方法是用會話變量或隱式表單標簽保存組件的一些信息。當重新制作組件的實例時,試圖用保存在會話變量中的信息恢復組件的狀態。但兩種方法的弊端都在于:從資源的角度來看過于昂貴,甚至恰好難以實現。

      很幸運有個好消息。我們都知道可持續性的整個前提是能夠將變量恢復到這樣的狀態,以至于組件知道在上次的例示中它在哪。這有助于組件現在去做它假定要做的。這個方案的一個典型例子是網頁上資料的翻頁。當用戶點擊Page Down時,我們需要知道我們在前一頁的位置。 不把變量保存在內存中(如會話變量),如果我們能將它們保存在文件中,等以后需要時檢索不是會很好嗎?用基礎的數據形式(字符串與數字)保存數據很容易。用對象和數組會怎樣呢?對象和數組本質上是存儲器中的二進制數據流。如果我們能讀這個數據我們就能將它寫進文件以便以后的檢索。關于對象有個好注意。盡管數組的情況不同。首先你不能用數組做組件的屬性(VB6.0)。你可以用他們做變量,但以后你會碰到路障。幸運地是我們為這種情況發現了一個工作區。

      你可以將所有或部分屬性保存在一個PropertyBag對象中。PropertyBag對象控制在一個對象調用過程中可以保存和恢復的信息。PropertyBag對象的內容(Content)屬性提供你任何存在組中的二進制數據流。由你來將這些二進制數據流寫進文件中以便日后的檢索。

    實例:

    比如你有一個類MyComp.clsMyDept,它有兩個屬性MyDepartment$ 和 MyEmployees (一個ADO記錄集對象)。

    以下是這個類模塊的代碼:

    Option Explicit
    Option Compare Text

    Public MyDepartment As String
    Public MyEmployees As ADODB.Recordset

    Dim objBag As New PropertyBag

    Private Sub Class_InitProperties()
    Set MyEmployees = New ADODB.Recordset
    MyEmployees.Fields.Append "EmpName", adVarChar, 30
    MyEmployees.Fields.Append "EmpSal", adCurrency
    MyEmployees.Open
    End Sub

    Public Sub SaveMyProperties()
    Dim intFile%, bytRec() As Byte
    objBag.WriteProperty "MyDepartment", MyDepartment
    objBag.WriteProperty "MyEmployees", MyEmployees
    ' Save this data in a file for later retrieval
    intFile = FreeFile
    If Dir("C:\MyData.txt", vbNormal) = "" Then
    Else
    Kill "C:\MyData.txt"
    End If
    Open "C:\MyData.txt" For Binary Access Write As #intFile
    bytRec = objBag.Contents
    Put #intFile, , bytRec
    Close #intFile
    End Sub

    Public Sub RestoreMyProperties()
    Dim intFile%, bytRec() As Byte
    ' Read the saved data from the file.
    ReDim bytRec(FileLen("C:\MyData.txt"))
    intFile = FreeFile
    Open "C:\MyData.txt" For Binary Access Read As #intFile
    Get #intFile, , bytRec
    objBag.Contents = bytRec
    Close #intFile
    ' PropertBag restored. Lets restore the properties now.
    MyDepartment = objBag.ReadProperty("MyDepartment")
    Set MyEmployees = objBag.ReadProperty("MyEmployees")
    End Sub


    在客戶應用中保存屬性

    Private Sub Command1_Click()
    Dim objDept As New MyComp.clsMyDept
    objDept.MyDepartment = "Research"
    ' Add one employee
    objDept.MyEmployees.AddNew
    objDept.MyEmployees!EmpName = "Harry"
    objDept.MyEmployees!EmpSal = 2500
    objDept.MyEmployees.Update
    ' Add second employee
    objDept.MyEmployees.AddNew
    objDept.MyEmployees!EmpName = "Potter"
    objDept.MyEmployees!EmpSal = 3000
    objDept.MyEmployees.Update
    ' Save the properties by calling the method from our component
    objDept.SaveMyProperties
    Set objDept = Nothing
    End Sub


    取回保存的屬性

    Private Sub Command2_Click()
    Dim objDept As New MyComp.clsMyDept
    ' Restore properties by calling the method from our component
    objDept.RestoreMyProperties
    ' Lets see what is restored
    Debug.Print objDept.MyDepartment 'Will print Research

    objDept.MyEmployees.MoveFirst
    Debug.Print "" & objDept.MyEmployees!EmpName 'Will print Harry
    objDept.MyEmployees.MoveNext
    Debug.Print "" & objDept.MyEmployees!EmpName 'Will print Potter
    Set objDept = Nothing
    End Sub

      先別激動,你在自己的應用中運行這個酷件之前,必須了解它的局限性。用于保存的時間取決于屬性的大小和數據類型。注意大部分時間用在ReadProperty 和 WriteProperty 中。原因很簡單,當我們處理象ADO記錄集這樣的結構型數據時,過程可不象拷貝字節流那樣簡單。數據也得被解釋。

    保存記錄集時我觀察到以下情況:

    1、保存100,000行每列有25個字符的記錄集用了50秒。
    2、檢索同樣的數據用了20秒。

      有個更好的方法保存記錄集對象。他們有自己的Save方法。用Save方法保存100,000個記錄集僅用了6秒。用Open方法檢索保存的記錄集對象,從保存的記錄集對象中檢索100,000行用了20秒(與PropertyBag方法的時間一樣)

    選擇使用數組

      持續的ADO記錄集為在你的應用中使用數組提供了一個好方法。想想,如果你使用起來你就有所有ADO的簡便方法可以使用,象FIND,SORT,FILTER等等。實際上,如果你觀察仔細,會發現我們在上述實例中用持續的記錄集實現了職工記錄的數組。純理論化的人可能會反對,因為你不得不在你的設計中包含ADO,而這將增加你分布磁盤的大量存儲。

    小結

      在Web類的無狀態應用中組件的可持續性是非常重要的功能。使用PropertyBag對象保存和檢索屬性。對于記錄集對象分別使用ADO的Save和Open方法保存和檢索數據。將上述例子作為摸板,給每一個實例加上變量文件名就可以制作你自己的組件。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>