VbScript / ASP Classic优秀的OOP模式

时间:2012-09-03 10:43:37

标签: oop asp-classic vbscript

Hy all, 我必须在Classic ASP中创建一个网站,我真的想做一个干净的设计,所以我会尝试将所有内容放在Classes和Models中来模拟ViewModel模式。

所以你能告诉我这个创建对象的方法是否合适,因为我会在任何地方使用它

Class User
Public Name
Public Adress
Public Title
Public Text 
Public Rights 'ArrayList of Right objects

    Private Sub Class_Initialize()
       Initialize
    End Sub

    Private Sub Class_Terminate()
       Dispose
    End Sub

   Private Sub Initialize()
       Name    = ""
       Adress  = ""
       Title   = ""
   Text    = ""
   Set Rights = Server.CreateObject("System.Collections.ArrayList") ' Arraylist .net
   End Sub

   Private Sub Dispose()      
   End Sub

End Class

Class Right

    Public Name

    Private Sub Class_Initialize()
        Initialize
    End Sub

   Private Sub Class_Terminate()
       Dispose
   End Sub

   Private Sub Initialize()
       Name    = ""
   End Sub

   Private Sub Dispose()      
   End Sub

End Class

然后我这样做来实例化对象:

Dim myUser 
Set myUser = New User

'Do some work

Set myUser = nothing 'Dispose the object 

欢迎提出任何想法,建议或更正。 感谢帮助。

2 个答案:

答案 0 :(得分:2)

VBScript不支持使用参数进行对象实例化,但您可以像这样添加它:

Public Function [New User](name)
    Set [New User] = New User
    [New User].Name = name
End Function

现在您可以创建一个用户:

Set myUser = [New User]("Arthur Dent")

在初始化期间有要设置的必填字段时有用。

您还可以使用此技术制作复合材料:

Public Function [New PowerUser](name)
    Set [New PowerUser] = New User
    [New PowerUser].Name = name
    Set [New PowerUser].Rights = RightsCollection("PowerUser")
End Function

Public Function [New GuestUser](name)
    Set [New GuestUser] = New User
    [New GuestUser].Name = name
    Set [New GuestUser].Rights = RightsCollection("Guest")
End Function

答案 1 :(得分:1)

它不需要创建额外的函数“Initialize”和“Dispose”,并分别从Class_Initialize()和Class_Terminate()中调用它。 您可以将代码放在类构造函数和析构函数中。

其次,你把你的成员变量公之于众,如果你想让你的经典asp尽可能地面向对象,你应该开始使用getter和setter。 像这样:

Private m_Name

Public Property Get Name()  
    Name = m_Name
End Property

Public Property Let Name(sName)
    m_Name = sName
End Property

使用Rights成员变量,您将获得更多乐趣:)