0

我有一个小型应用程序,它允许用户创建帐户,然后互相奖励“积分”。UserAccount 是一个对象,Point 也是一个对象,它们之间存在聚合关系:每个 UserAccount 都有一个成员变量(PointHistory),它是一个 Points 的集合。

Point 对象仅包含 UserAccount 对象发送/接收 Point 的属性。

当我简单地序列化类以保留我的对象模型时,这很好。但是,我现在正在实现一个数据库来持久化对象数据,并且在任何给定时间只会将一个/一些对象加载到内存中。为了加载对象,我有一个构造函数方法,它从数据库中的一行创建一个新的 UserAccount,还有一个类似的构造函数从数据库行创建一个 Point。这就是麻烦开始的地方——当第二个构造函数必须引用第一个构造函数尚未构造的内容时,一个对象的构造函数如何调用另一个对象的构造函数?为了完成构造,对象必须已经构造。

简单的解决方案是简单地用从数据库查询中提取的字符串集合替换 Point 对象集合 (PointHistory)。这足以满足我的目的。但是,我想知道是否有另一种不放弃 Point 对象/对象模型的方法,以及这种聚合/持久性问题是否常见?

4

1 回答 1

0

如果我理解正确的话,UserAccount构造函数需要构造属于这个UserAccount的Points,而这些Points需要一种方式来引用当前正在构造的UserAccount?

如果是这种情况,您可以将 Me传递 给 Point 构造函数,这实际上将传递正在构造的 UserAccount。即使构造尚未完成,它也会传递 UserAccount 对象。

Class UserAccount

   Private _pointHistory As New System.Collections.Generic.List(Of MyProject.Point)

    Public Sub New()
       ...
       ...

       ' Instantiate a new point, and pass this UserAccount object into it 
       ' so that it can grab a reference
       Dim newPoint as New MyProject.Point(Me) 

       'Add the Point to this UserAccount's collection
       _pointHistory.Add(newPoint)

    End Sub

End Class


Class Point

    Private _parentAccount as MyProject.UserAccount

    Public Sub New(parentAccount as MyProject.UserAccount)

        'Store the reference to the User Account
        _parentAccount = parentAccount

    End Sub

End Class
于 2010-05-06T00:07:19.533 回答