2010-06-02 50 views
3

我真的不知道如何提出问题,所以请忍受我...从上一级获取信息?

我有3类:服务器,数据库和表。每个类都有一个“名称”属性。我希望它的工作原理是每台服务器可以有多个数据库,每个数据库可以有多个表。所以在Server类中我有这个属性。

Private _databases As List(Of Database) 
Public Property Databases() As List(Of Database) 
    Get 
     Return _databases 
    End Get 
    Set(ByVal value As List(Of Database)) 
     _databases = value 
    End Set 
End Property 

而且我在表的Database类中有类似的东西。这现在工作正常,因为我可以做这样的事情来获得服务器中的所有数据库。

For Each db In s.Databases 's being the server object 
     Debug.Print(db.Name) 

    Next 

我想展开这些类。我想要服务器类来处理所有的连接信息,我希望其他类在其中使用服务器类的连接信息。

例如,我设置一个服务器类和设置连接字符串到服务器。然后,我希望数据库类使用serverclass.connectionstring属性来连接到服务器,并得到所有数据库的列表。但我想保留在数据库类中的代码。我怎样才能做到这一点?

我已经附加了什么我想要做一些代码。

Public Class Server 

Private _name As String 
Public Property Name() As String 
    Get 
     Return _name 
    End Get 
    Set(ByVal value As String) 
     _name = value 
    End Set 
End Property 


Private _databases As List(Of Database) 
Public Property Databases() As List(Of Database) 
    Get 
     Return _databases 
    End Get 
    Set(ByVal value As List(Of Database)) 
     _databases = value 
    End Set 
End Property 
End Class 

'-----New class 

Public Class Database 

Private _name As String 
Public Property Name() As String 
    Get 
     Return _name 
    End Get 
    Set(ByVal value As String) 
     _name = value 
    End Set 
End Property 


Private _tables As List(Of Table) 
Public Property Tables() As List(Of Table) 
    Get 
     Return _tables 
    End Get 
    Set(ByVal value As List(Of Table)) 
     _tables = value 
    End Set 
End Property 

'This is where I need help! 
Private Sub LoadTables() 
    dim connectionstring as string = server.connectionstring 'Possible? 

    'Do database stuff 
End Class 

感谢您的阅读!

回答

2

您必须在您的子类的“拥有者”类的引用。

不使用代码(为简便起见),你现在所拥有的

Server 
---------- 
Databases -----> Database 
Name    ------------ 
        Tables  -----> Table 
        Name    -------------- 
             Name 

什么你是这样的:

Server 
---------- 
Databases -----> Database 
Name    ------------ 
^    Tables  -----> Table 
    |    Name    -------------- 
    --------------- Server    Name 
        ^    Database 
        |-------------------| 

Server财产上的Database类并在TableDatabase属性意在以拥有它们各自的实例的引用。

+0

谢谢,这是我想要做的。 – 2010-06-04 18:05:52

1

施工时将其传递的服务器到数据库,并设置一个字段。这是一个非常基本的形式dependency injection

+0

+1的链接,它叫什么。我一直在想要了解更多! – 2010-06-04 18:06:39

1

我想让personnaly让数据库知道存储它的服务器,这样数据库就能知道连接到哪个服务器的位置。

这样做看起来是这样的:

public class Database { 
    public Database(Server server) { 
     Server = server; 
    } 

    public Server Server { get; private set; } 
} 
+0

代码+1。它在我的路上帮助了我。 – 2010-06-04 18:06:11

+0

谢谢你让我知道我给你带来了一些东西。这是善良的。 =) – 2010-06-07 02:30:43