modello di mediatore o facciata o ...?

1

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 contiene ILocationTracking e UpdateLocationTrackingSettings e chiama Start() su ciascuno?

  • Mi sento come per GetSettingsByAssignment dovrei usare il modello di strategia di utilizzo. Sto pensando di implementare qualcosa come ITrackingSettingProvider che calcola e restituisce le impostazioni di tracciamento in base al compito.

  • Questo è overthinking \ over engineering?

  • Qualche suggerimento di un design diverso o migliore?

posta Daniel 20.01.2018 - 20:29
fonte

1 risposta

2

Is this overthinking\over engineering?

YES . È troppo presto per te per fare questa scelta. Se hai un'idea chiara, seguila. Se non lo fai, scrivi semplicemente alcuni test e falli passare con il codice più semplice possibile. Se si verifica una dipendenza di classe circolare, interromperla introducendo un'interfaccia. Quando il codice diventa ripetitivo o brutto, allora refactoring. A quel punto alcuni schemi di progettazione potrebbero soddisfare le tue necessità.

    
risposta data 20.01.2018 - 21:24
fonte