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à
timernella classegamepubblica. 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
gameabbia un eventoUpdatedoElapsede inoltrare direttamente l'eventoElapseddal 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!