Mi sto esercitando a scrivere codice verificabile. Un problema a cui ho partecipato (anche molto ricercato) è il modello singleton. La sua natura di stato globale lo rende inaffidabile da testare perché le modifiche alle proprietà di singleton vengono mantenute tra l'esecuzione di ciascun caso.
Anche così, Singleton è un modello di progettazione che viene utilizzato per risolvere i problemi che riguardano l'intera applicazione, ad esempio un NavigationManager
.
Ecco una semplice implementazione di una classe del gestore di navigazione, la cui responsabilità è di tenere traccia della navigazione dell'utente attraverso l'app.
Per gli esempi mi piacerebbe che usiamo C#
o Java
.
class NavigationManager {
private ICollection<INavigable> navigables; // all possible navigables views
private Stack<INavigable> navigableStack; // the navigation stack
private INavigable currentNavigable; // the current view
private NavigationManager() {
navigables = new ICollection<INavigable>()
navigables.Add( // register all posible navigables
}
static NavigationManager Instance {
get {
if(_instance == null ) {
_instance = new NavigationManager();
}
return _instance
}
}
private static NavigationManager _instance;
void navigateTo(INavigable n) { //.. code to change view
}
È chiaro che la classe dovrebbe essere un singleton in modo che possiamo navigare tra le visualizzazioni con navigateTo()
, quale alternativa a Singleton è possibile ottenere?