Diciamo che ho Game
class. Questa classe di gioco viene costruita con tutte le sue dipendenze da Game(ITimer timer, IPointsUpdater updater)
. Quando timer
aumenta Elapsed
il updater
calcola i punti attuali dell'utente. timer
è memorizzato in una proprietà readonly privata nella classe game
.
Ora voglio incollare tutto ciò insieme. Ho una sorta di interfaccia utente e ogni volta che i punti vengono aggiornati voglio aggiornare la mia interfaccia utente. Questo è come lo farei io:
var timer = new Timer(500);
var updater = new Updater();
var game = new Game(timer, updater);
timer.Elapsed += (_,_) => RefreshUi();
Va bene iscriversi direttamente al timer? Ho delle alternative:
- Potrei rendere pubblica la proprietà
timer
nella classegame
pubblica. Quindi potrei iscrivermi direttamente agame.Timer.Elapsed
. Questo mi sembra contro l'incapsulamento dei dati, perché questo mi permetterebbe di iniziare e di fermare anche il timer. -
Potrei lasciare che
game
abbia un eventoUpdated
oElapsed
e inoltrare direttamente l'eventoElapsed
dal timer. Ciò lascia intatto il mio incapsulamento pur avendo più righe di codice da scrivere.Preferisco la mia soluzione utilizzando l'iniezione di dipendenza. È questa la migliore pratica? Grazie in anticipo!