Lo stack overflow ha suggerito che questa domanda sia la più adatta a me. Normalmente lavoro in C #, ma attualmente sto lavorando a un'applicazione vb.net net. Quindi sentiti libero di rispondere con vb.Net o c # ...
Essenzialmente ho un singleton che fa tutto il lavoro per ottenere le impostazioni globali che sono memorizzate nel database; ma c'è un'interfaccia (modulo di dialogo) che consente a quelle impostazioni di cambiare.
Quindi quello che ho fatto è stato creare un singleton che nella prima istanza (solo) esegue il metodo di aggiornamento pubblico. Se, tuttavia, un utente apre la finestra di dialogo delle impostazioni, il singleton viene istanziato e il comando di aggiornamento viene richiamato separatamente nel caso in cui l'utente abbia apportato modifiche alle impostazioni nella finestra di dialogo delle impostazioni ... è l'unico posto in cui eseguo il metodo di aggiornamento all'esterno dell'istanza iniziale dell'oggetto Singleton. È plausibile che un altro sviluppatore errante possa eseguire in modo irresponsabile il metodo di aggiornamento più e più volte, ma non danneggerebbe nulla tranne rallentare l'applicazione - e questa è la ragione principale per cui volevo usare un singleton, perché ci sono casi in cui con le chiamate al le impostazioni vengono fatte centinaia se non migliaia di volte in loop; che rallenterebbe davvero l'applicazione, e anche le impostazioni vengono chiamate da molte posizioni casuali a seconda di cosa fa l'utente ... perché non uso un semplice DTO, beh, questo è descritto di seguito.
L'altra cosa pazza di questa applicazione è che più "ambienti" possono essere eseguiti nello stesso thread, ognuno con impostazioni completamente diverse (lunga storia). Il modo in cui i precedenti sviluppatori lo gestivano effettuando una chiamata per aggiornare un DTO delle impostazioni ogni volta che si verificava un cambiamento o un cambiamento nelle impostazioni o "ambiente" o all'avvio dell'applicazione. In una ricerca ci sono circa 40 località ... sembra matto per me. Questo è in cima alle centinaia di chiamate a cui si accede al DTO. Voglio che questo singleton faccia il lavoro pesante e verifichi in quale ambiente si trova l'app e recuperi le impostazioni solo una volta dal database - tranne in quella occasione con la finestra di dialogo delle impostazioni che ho menzionato sopra, dove viene invocato il metodo di aggiornamento.
Risultato finale, un nocciolo singleton ... Di seguito è riportata una versione semplificata del codice. Fondamentalmente, sto chiedendo se questo è un modello ragionevole, o ce n'è uno migliore per questo? Si noti che un potenziale svantaggio della mia soluzione è che devo ancora effettuare una chiamata al database, come controllo per il database corrente, ogni volta che questa classe viene istanziata. Grazie per il feedback.
Public Class MySingleton
Private Shared _Instance As MySingleton = Nothing
Private _ExampleSetting As String
Private _CurrentDatabase as DBDatabase
Public Shared ReadOnly Property GetInstance() As MySingleton
Get
If _Instance Is Nothing Then
_Instance = New MySingleton()
ElseIf _CurrentDatabase <> GetCurrentDataBase() Then
_Instance = New MySingleton()
End If
Return _Instance
End Get
End Property
Public ReadOnly Property ExampleSetting As String
Get
Return _ExampleSetting
End Get
End Property
Private Sub New()
Update()
End Sub
Public Sub Update()
_CurrentDatabase = GetCurrentDataBase()
_ExampleSetting = _CurrentDatabase.GetSetting("exampleSetting")
End Sub
End Class