Sto scrivendo un'app che tiene traccia della posizione del dispositivo e in base a determinati fattori (l'utente ottiene un compito), deve modificare le impostazioni di localizzazione (ad esempio, la frequenza).
Ho un problema con la progettazione di questo.
// I left out methods to start\stop tracking
interface ILocationTracker
{
event EventHandler LocationChanged(Position pos);
void UpdateTrackingSettings(TrackingSettings settings);
}
interface IUser
{
event EventHandler AssignmentAdded(Assignment a);
}
Non voglio accoppiare il IUser
a ILocationTracker
, quindi ho aggiunto questo (sto lasciando i campi in modo che sembrino più semplici da leggere):
class UpdateLocationTrackingSettings
{
public UpdateLocationTrackingSettings(ILocationTracker tracker, IUser user)
{
}
// I need to somehow start/stop it listening to AssignmendAdded event
public void Start() {
// Subscribe to IUser:AssignmentAdded
}
public void Stop() {
// Unsubscribe from IUser:AssignmentAdded
}
void OnAssignmentAdded(Assignment a)
{
TrackingSettings settings = GetSettingsByAssignment(a);
_tracker.UpdateTrackingSettings(settings);
}
}
Le domande che ho:
-
Come 'iniziare' il
UpdateLocationTrackingSettings
? Devo avere una facciata per il tracciamento della posizione che contieneILocationTracking
eUpdateLocationTrackingSettings
e chiamaStart()
su ciascuno? -
Mi sento come per
GetSettingsByAssignment
dovrei usare il modello di strategia di utilizzo. Sto pensando di implementare qualcosa comeITrackingSettingProvider
che calcola e restituisce le impostazioni di tracciamento in base al compito. -
Questo è overthinking \ over engineering?
-
Qualche suggerimento di un design diverso o migliore?