vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Instanzen nur durch eine Builder-Klasse erzeugen 
Autor: keco
Datum: 24.04.20 09:30

Hallo Manfred,

die Klasse enthält nur die Daten zu einer Person, genau. Es muss also pro Person eine neue Instanz von "Person" erzeugt werden.

Die Daten könnten theoretisch auch aus anderen Quellen stammen, zum Beispiel einer Datenbank. (Ich verwende zum Testen immer XML-Daten, damit komme ich schneller zurecht.)

Ich habe mal einen Beispielcode zusammengezimmert, um das Problem hoffentlich besser zu verdeutlichen. AssemblyA besteht aus folenden Klassen:
Public Class Person
    Public Property Name As String
    Public Property Age As Integer
    Public Property Address As String
    Public Property Phone As String
    Public Property MobilePhone As String
End Class
 
Public Class PersonBuilder
    Public Function Create(data As String) As Person
        Dim p As New Person
        p.Name = ' read element
        p.Age = ' read element
        ' ...
        Return p
    End Function
End Class
 
Public Class PersonReader
    Private builder As New PersonBuilder
 
    Public Function ReadPersons(file As String) As Person()
        Dim list As New List(Of Person)
        Dim xml As New Xml.XmlDocument
        xml.Load(file)
        For Each personNode As Xml.XmlNode In xml.SelectNodes("Person")
            list.Add(builder.Create(personNode.InnerXml))
        Next
        Return list.ToArray
    End Function
End Class
Die AssemblyB (typischerweise jene mit der GUI) enthält folgenden Code:
    Sub Main()
        Dim reader As New PersonReader
        Dim allPersons As Person()
        allPersons = reader.ReadPersons("list.xml")
 
        ' Änderungen dürfen nicht möglich sein:
        allPersons(0).Name = "Bob"
 
        ' Auch das Erzeugen einer neuen Person darf hier nicht möglich sein:
        Dim p1 As New Person
        p1.Name = "Max Mustermann"
        p1.Age = 33
 
        ' Aber das hier darf möglich sein:
        Dim builder As New PersonBuilder
        Dim p2 As Person
        p2 = builder.Create("some xml data")
    End Sub
Der Code ist nicht ausgereift und soll nur zeigen, was ich mir vorstelle. Instanzen von "Person" dürfen nur in der Klasse "PersonBuilder" erzeugt werden, "PersonBuilder" darf aber von überall aus aufgerufen werden, sofern die notwendigen Daten im richtigen Format beigestellt werden.

Das würde es mir ermöglichen in der Klasse "PersonBuilder" Methoden einzufügen, die protokollieren, von wo aus ein Datensatz erzeugt wurde, entweder aus der Klasse "PersonReader" heraus oder an einer beliebig anderen Stelle.

Noch eine Ergänzung: Die Personendaten werden dann global zugänglich gemacht (ich denke in AssemblyA). Da die Anwendung mit Erweiterungen ergänzt werden kann, könnte man also auch aus anderen Assemblys auf die Personenliste zugreifen und diese verändern (siehe Beispielcode von AssemblyB). Das darf nicht möglich sein. Er könnte zwar neue Datensätze mittels der "PersonBuilder"-Klasse anlegen, aber das würde man über die zukünftige Protokollierung sehen können.

Beitrag wurde zuletzt am 24.04.20 um 09:32:12 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Instanzen nur durch eine Builder-Klasse erzeugen1.058keco23.04.20 10:35
Re: Instanzen nur durch eine Builder-Klasse erzeugen381Manfred X23.04.20 17:55
Re: Instanzen nur durch eine Builder-Klasse erzeugen387keco24.04.20 09:30
Re: Instanzen nur durch eine Builder-Klasse erzeugen368Manfred X24.04.20 14:28
Re: Instanzen nur durch eine Builder-Klasse erzeugen366Kuno6024.04.20 22:57
Re: Instanzen nur durch eine Builder-Klasse erzeugen358keco30.04.20 17:41

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel