Datenstruktur, shared und Threads

07/08/2009 - 07:36 von Uwe Gabbert | Report spam
Hallo,

Ich programmiere erst seit kurzem in OOP (besser gesagt, ich versuche
ein entsprechendes Datenmodell umzusetzen)

1. Ich habe eine Klasse mit ca. 30 Datenfeldern. (ok) (Datenstruktur)
2. Eine Klasse List (of Struktur), welche die Logik enthàlt (Lesen,
Schreiben, Filtern) als shared Funktionen. Die Daten stehen in einer
kleinen XML-Datei (ok)
3. Mehrere Formulare, welche auf die 2. Klasse zugreifen.

Alles OK.

Im 2. Teil möchte ich es (fast) genauso machen.
Nur liegen die Daten in diversen SQL-Datenbanken und müssen aufwendig
zusammengestellt werden, was einige Sekunden dauert. (zu lange für
permanente Suchanfragen)
Da diese Daten sich nur selten àndern (sondern nur sehr oft gelesen
werden), wollte ich die Daten zwischenspeichern, welche dann vom
Hauptprogramm per BGW in periodischen Abstànden gefüllt wird.

Ich könnte (für mich problemlos ) die Daten in einer XML
zwischenspeichern, halte diesen Weg aber nicht für sinnvoll.

Wenn ich versuche, eine List (of Struktur) zu verwenden, muss ich diese
ja vorher instanzieren. Dann funktionieren die shared Funktionen nicht.

Wie kann man das Problem lösen?

Vielen Dank.

Uwe

Uwe Gabbert
VS 2008 - VB - .NET 3.5
 

Lesen sie die antworten

#1 Elmar Boye
07/08/2009 - 09:53 | Warnen spam
Hallo Uwe,

Uwe Gabbert schrieb:
1. Ich habe eine Klasse mit ca. 30 Datenfeldern. (ok) (Datenstruktur)
2. Eine Klasse List (of Struktur), welche die Logik enthàlt (Lesen,
Schreiben, Filtern) als shared Funktionen. Die Daten stehen in einer
kleinen XML-Datei (ok)
3. Mehrere Formulare, welche auf die 2. Klasse zugreifen.

Wenn ich versuche, eine List (of Struktur) zu verwenden, muss ich diese
ja vorher instanzieren. Dann funktionieren die shared Funktionen nicht.



Da Du den Aufbau nicht genauer beschreibst,
ist die Antwort etwas allgemein ausgefallen.

Wie Du gemerkt hast sind Shared Methoden und Variablen
- ebenso wie Module - Gift für Multi-Thread Programmierung.

Fasse die Zugriffsmethoden in "normale" Klassen zusammen,
gleiches gilt auch für gemeinsame Variablen - wie z. B.
die Verbindung zur Datenbank.

Damit die Formulare aus 3.) nicht vollstàndig umgebaut werden müssen,
erzeugst Du für Punkt 2.) eine Standard-Instanz der Datenzugriffs-Klasse
erzeugen, die von den bisherigen Shared Funktionen genutzt wird.

Und für weitere ausgelagerte Threads kannst Du weitere Instanzen erzeugen.

Zur Illustration könnte das z. B. so aussehen:

Public Class Struktur
' das Datenobjekt
End Class

Public Class StrukturCollection
Inherits List(Of Struktur)
' Gemeinsame Variable für den Standardzugriff
Private Shared __dataAccess As StrukturDataAccess

Shared Sub New()
' Hier wàre eine Factory für die Verbindungszeichenfolge denkbar
' http://de.wikipedia.org/wiki/Fabrikmethode
__dataAccess = New StrukturDataAccess("Data Source=...")
End Sub

' Die "alten" Shared Methoden
Public Shared Function SelectAll() As StrukturCollection
' Zugriff über die Standard-Instanz
Return __dataAccess.SelectAll()
End Function
End Class

Public Class StrukturDataAccess
' Platzhalter für Variablen beim Datenzugriff
Private _connectionString As String

Public Sub New(ByVal connectionString As String)
Me._connectionString = connectionString
End Sub

' Exemplarisch für eine Zugriffsmethode
Public Function SelectAll() As StrukturCollection
' Hier erfolgt der Datenbankzugriff
Return New StrukturCollection()
End Function
End Class

Das ist sehr allgemein gehalten und weitere Variationen wàren denkbar -
und je nach tatsàchlicher Ausgangslage sinnvoll.

Gruß Elmar

Ähnliche fragen