2010-06-02 2 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 

И у меня есть что-то подобное в классе базы данных для таблиц. Теперь это прекрасно работает, потому что я могу сделать что-то подобное, чтобы получить все базы данных на сервере.

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 класса и свойство Database класса Table предназначены для ссылок на экземпляр каждого из них, который им владеет.

+0

Спасибо, это то, что я хотел сделать. –

1

Передайте сервер в базу данных при его создании и установите поле. Это очень простая форма dependency injection.

+0

+1 за ссылку и то, что она называется. Я всегда собираюсь узнать больше! –

1

Я хотел бы, чтобы база данных знала сервер, на котором он хранится, чтобы база данных знала, где подключиться, в зависимости от того, какой сервер он указан.

Это будет выглядеть примерно так:

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

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

+1 для кода. Это помогло мне на моем пути. –

+0

Спасибо, что сообщили мне, я принес тебе кое-что. Это мило. знак равно –

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