vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 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 - Fortgeschrittene
Singleton - Feedback 
Autor: Sepp_81
Datum: 05.09.14 11:05

Hallo zusammen,

ich muss meinen logger als Singleton umsetzen und habe dabei gleich noch probiert properties zu verwenden.

Ich würde gerne ein Feedback haben ob ich das richtig gemacht habe. Evtl kann jemand mal seine Meinung zum Code äußern oder mich belehren wie man es besser macht.

Hier der Code

'System.VisualBasic auskommentiert
Option Strict On
Option Explicit On
 
Public Class frmMain
 
    Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles _
      MyBase.Load
        LoggerClass.Instance.LoggerInfo("Testmessage", 2)
    End Sub
End Class
'System.VisualBasic auskommentiert
Option Strict On
Option Explicit On
 
Imports LoggerSingleton.LogDataSet
 
Public Class LoggerClass
 
    Private Shared LoggerDataSet As New LogDataSet
 
    Private _ex As Exception
    Private _message As String
    Private _priority As Integer
 
    '### Singlton Instance
    Private Shared LoggerSingletonObject As LoggerClass
 
    Public Shared ReadOnly Property Instance() As LoggerClass
        Get
            If LoggerSingletonObject Is Nothing Then
                LoggerSingletonObject = New LoggerClass
            End If
            Return LoggerSingletonObject
        End Get
    End Property
 
    '### Logger
    Public WriteOnly Property P_ex As Exception
        Set(value As Exception)
            _ex = value
        End Set
    End Property
 
    Public WriteOnly Property P_message As String
        Set(value As String)
            _message = value
        End Set
    End Property
 
    Public WriteOnly Property P_priority As Integer
        Set(value As Integer)
            _priority = value
        End Set
    End Property
 
    ''' <summary>
    ''' Schreibt die Fehlermeldung ins Log
    ''' </summary>
    ''' <param name="ex">Fehlermeldung</param>
    ''' <param name="priority">1:Fehler; 2:Problematisch; 3:Information</param>
    ''' <remarks></remarks>
    Public Sub LoggerInfo(ByVal ex As Exception, ByVal priority As Integer)
        P_ex = ex
        P_priority = priority
 
        Dim trace As Diagnostics.StackTrace = New Diagnostics.StackTrace(_ex, _
          True)
        Dim fileNames As String = trace.GetFrame((trace.FrameCount - _
        1)).GetFileName()
        Dim lineNumber As Integer = trace.GetFrame((trace.FrameCount - _
        1)).GetFileLineNumber()
 
        Try
            LoggerDataSet.Log.AddLogRow(_priority, Date.Now, _ex.Message, _
              fileNames, lineNumber)
        Catch genEx As Exception
            LoggerInfo(genEx.Message, 1)
        End Try
    End Sub
 
    ''' <summary>
    ''' Schreibt eine Information/Nachricht ins Log
    ''' </summary>
    ''' <param name="message">Fehlermeldung</param>
    ''' <param name="priority">1:Fehler; 2:Problematisch; 3:Information</param>
    ''' <remarks></remarks>
    Public Sub LoggerInfo(ByVal message As String, ByVal priority As Integer)
        P_message = message
        P_priority = priority
        Try
            Dim fileNames As String = ""
            Dim lineNumber As Integer
            LoggerDataSet.Log.AddLogRow(_priority, Date.Now, _message, _
              fileNames, lineNumber)
        Catch genEx As Exception
            LoggerInfo(genEx.Message, 1)
        End Try
    End Sub
End Class


Danke

Beitrag wurde zuletzt am 05.09.14 um 11:07:24 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Singleton - Feedback 
Autor: Micke
Datum: 20.10.14 09:39

Hi Sepp,
der Singletonteil ist richtig.

folgendes kannst direkt löschen, gehört alles als Parameter in "Public Sub LoggerInfo" rein.
Begründung - über singleton nachzudenken heißt, daß man konsistente Objektzustände für wichtig hält ... dann sabotiere dies nicht durch solche Properties
    Public WriteOnly Property P_ex As Exception
        Set(value As Exception)
            _ex = value
        End Set
    End Property
 
    Public WriteOnly Property P_message As String
        Set(value As String)
            _message = value
        End Set
    End Property
 
    Public WriteOnly Property P_priority As Integer
        Set(value As Integer)
            _priority = value
        End Set
    End Property

Micke

Beitrag wurde zuletzt am 20.10.14 um 09:40:52 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Singleton - Feedback 
Autor: Manfred X
Datum: 20.10.14 16:49

Ein Wikipedia-Artikel schlägt vor, die Threadsynchronisierung
durch ein LockObjekt bei der Konstruktion der Instanz zu sichern.
https://de.wikipedia.org/wiki/Liste_von_Singleton-Implementierungen

Public Class Singleton
 
    ' Variable zur Speicherung der einzigen Instanz
    Private Shared instance As Singleton = Nothing
 
 
    ' Hilfsvariable für eine sichere Threadsynchronisierung.
    Private Shared ReadOnly mylock As New Object()
 
    ' Konstruktor ist privat, damit die Klasse nur aus sich 
    ' selbst heraus instanziiert werden kann.
    Private Sub New()
        '
    End Sub
 
 
    ' Diese Shared-Methode liefert die einzige Instanz der Klasse zurück.
    Public Shared Function GetInstance() As Singleton
        SyncLock (mylock)
            If instance Is Nothing Then
                instance = New Singleton
            End If
        End SyncLock
 
        Return instance 
    End Function 
  End Class
Ich bevorzuge Shared-Klassen / Shared-Member.
Und in VB gibt es auch Module.
Singletons sind eher als Basis für Ableitungen interessant.

Beitrag wurde zuletzt am 20.10.14 um 16:59:19 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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