Mehre oder nur eine Instanz oder alles Shared?

  • Allgemein

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Agita.

    Mehre oder nur eine Instanz oder alles Shared?

    Habs mit [Allgemein] versehen, da es imo allgemeine Fragen sind.

    1)
    Ich habe eine Klasse. In dieser befindet sich unter anderem eine Liste für Strings.

    Sagen wir als Beispiel, ich will Templates erstellen. Für ein Template instanziere ich die Klasse und füge die Strings hinzu, Für ein weiteres Template instanziere ich erneut und füge dort die jeweiligen Strings hinzu.

    Ist es nun besser, für jedes Template eine eigene Instanz zu benutzen, oder doch lieber nur eine Instanz und die Liste zu einer Sortedlist(Of String, List(Of String)) umzubauen um nur dort die Strings für die jeweiligen Templates zu speichern?

    Dabei muss aber bedacht werden, dass bei einzelnen Instanzen die Funktionen normal aufgerufen werden können. Wenn ich allerdings nur eine Instanz mit der Sortedlist benutze, müsste ich jegliche Funktionen mit DoSomething(TplName) aufrufen.

    Zerbreche mir gerade den Kopf, was besser wäre :D

    Oder 2)
    Wenn ich nur eine Instanz benutzen würde, Wäre es dann evtl besser auf die Instanz zu verzichten und alles Shared zu machen?

    Geht mir in erster Linie um Benutzerfreundlichkeit und sinnvoll im Vergleich zur Performance
    definiere

    Agita schrieb:

    Template
    Template ist z.B. die List-Klasse, die per New List(Of String) eine String-Instanz der Klasse List erstellt.
    Nimm Dir als Beispiel die String-Klasse.
    Shared sind dort z.B. String.IsNullOrNothing(), String.Format() usw., wo der zu behandelnde String Parameter oder ReturnValue ist.
    Instanziiert sind Prozeduren, die auf das Objekt selbst wirken.
    Was brauchst Du wirklich?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wohl ein Missverständnis :P
    Wenn ich in der Art von "Template" rede dann meine ich solche wie für Webseiten. Also "Vorlagen"...

    Gibt 3 Möglichkeiten zwischen denen ich mich nicht entscheiden kann.

    1)

    VB.NET-Quellcode

    1. Class MyTemplate
    2. Private Strings As List(Of String) = New List(Of String)
    3. Public Sub AddStr(Value As String)
    4. ...
    5. End Sub
    6. Public Function DoSomething() As Qwaselwasel
    7. End Function
    8. End Class
    Für jede Vorlage ein neues "New MyTemplate()"
    Die Funktion zum Strings hinzufügen muss dann nur sein: ".AddStr(Value)"
    Und die User brauchen für jede Vorlage nur ".DoSomething()" benutzen.

    2)

    VB.NET-Quellcode

    1. Class MyTemplateCollection
    2. Private Strings As Sortedlist(Of String, List(Of String)) = New Sortedlist(Of String, List(Of String))
    3. Public Sub AddStr(TplName As String, Value As String)
    4. ...
    5. End Sub
    6. Public Function DoSomething(TplName As String) As Qwaselwasel
    7. End Function
    8. End Class
    Für alle Vorlagen zusammen wird nur einmal "New MyTemplateCollection()" benutzt.
    Allerdings müssen dann die "TplName" Parameter immer mitgegeben werden.
    Also ".AddStr(TplName, Value)" und ".DoSomething(TplName)"

    3)

    VB.NET-Quellcode

    1. Class MyTemplateCollection
    2. Private Strings As Sortedlist(Of String, List(Of String)) = New Sortedlist(Of String, List(Of String))
    3. Public shared Sub AddStr(TplName As String, Value As String)
    4. ...
    5. End Sub
    6. Public shared Function DoSomething(TplName As String) As Qwaselwasel
    7. End Function
    8. Private Sub New()
    9. End Sub
    10. End Class
    Wie eben, nur als statische Klasse.

    Oder, was mir gerade einfällt... 4)
    Die Klasse weg lassen und nur ein Modul benutzen.

    Also ich denke, eine Statische Klasse ist wohl besser als eine die vorher instanziert wird, oder? Und ich denke, dass ein Modul da noch besser wäre oder? Also entweder 1 oder4 =)
    Auch das hat nix mit Templates zu tun, ich würde das ggf. als Basisklasse bezeichnen.
    Lass mal die Static / Shared Sachen (zunächst) weg. Wenn Du solch brauchst, kannst Du sie ja immer noch hinzufügen.
    Eine ordentliche Instanz ist halt eine ordentliche Instanz.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    3 geht gar net weil eine statische Methode NIEMALS auf instanzmember zugreifen darf/kann

    ich weiß auch gar net was du anstellen willst. mit wäre am einfachsten in diesem fall eine list of mytemplate. du kannst dann halt direkt mit einzelnen templete objekten arbeiten. obkjektorientierung ist eine vereinfachung zur reduzierung von (logik)fehlern. das was deine statische klasse tun würde, das kann man auch ohne oo umsetzen.
    Das weiß ich, dass Shared-Methoden nur direkt aufgerufen werden ohne Instanzierung :P Hab nur manchmal Schwierigkeiten mich auszudrücken xD

    Also wäre es, wie ich sehe, doch in allem sinnvoller für jedesmal, wenn man es braucht eine neue Variable mit "New MyTemplate()" zu erstellen, anstatt alles in einer zu speichern, sei es statisch oder als Modul...