2010-05-05 3 views
0

У меня есть небольшое приложение, которое позволяет пользователям создавать учетные записи, а затем присуждать «очки» друг другу. UserAccount - это объект, а также Point, и между ними существует взаимосвязь агрегирования: каждый UserAccount имеет переменную-член (PointHistory), которая представляет собой набор точек.Агрегирование отношений и создание объектов из хранилища базы данных (vb)

Объект Point просто содержит свойства, для которых объект UserAccount отправлен/получен Point.

Это было прекрасно, когда я просто сериализовал классы, чтобы сохранить мою объектную модель. Однако теперь я реализую базу данных для сохранения данных объекта, и только один/некоторые объекты будут загружены в память в любой момент времени. Чтобы загрузить объекты, у меня есть метод конструктора, который создает новый UserAccount из строки в базе данных и аналогичный конструктор для создания точки из строки базы данных. Здесь начинается проблема - как конструктор для одного объекта вызывает конструктор для другого объекта, когда второй конструктор должен ссылаться на на то, что еще не построил первый конструктор? Чтобы завершить строительство, объект должен быть уже построен.

Простое решение - просто заменить коллекцию объектов Point (PointHistory) на коллекцию строк, взятых из запроса к базе данных. Этого достаточно для моих целей. Тем не менее, мне интересно, есть ли другой способ сделать то, что не оставляет объект объекта/объектную модель, и является ли эта проблема с агрегацией/персистентностью распространенной?

+0

Привет, Если вы нашли мой ответ полезным, отметьте его как Принято. –

+0

жаль, что я не понимал, что это был тик в то время; и когда я нажал стрелку вверх, это не сработало, потому что моя учетная запись не зарегистрирована – Andrew

ответ

0

Если я правильно понимаю, конструктор UserAccount должен построить точки, принадлежащие этому 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 
+0

Блестяще, спасибо. Я сделаю это. – Andrew

+0

Если это то, что вы искали, отметьте ответ как принятый ... –

Смежные вопросы