Quale modello di progettazione scegliere quando si supportano più strumenti analitici?

1

Ho trascorso parecchio tempo ad apprendere tutti i possibili schemi di progettazione, ma non riesco a trovare quello ideale per il caso seguente. Sto sviluppando un'applicazione iOS in cui utilizziamo più strumenti di analisi come Google Analytics / Facebook Analytics ed è possibile che in futuro ne aggiungiamo altri (la nostra azienda è ossessionata dalla misurazione: D).

Ciascuno di essi usa il proprio SDK personalizzato per registrare un evento che viene fornito con il proprio metodo per inviare un evento e i propri parametri. Mi piacerebbe rifattorizzarlo e creare un modulo in cui l'aggiunta di un nuovo strumento di analisi non porterebbe all'odore del codice e, nel migliore dei casi, ci sarebbe un posto centrale che invierebbe gli eventi contemporaneamente.

Ci stavo pensando:

  1. Definizione di un protocollo AnalyticsProtocol che richiede l'implementazione del metodo sendEvent
  2. Definizione della classe AnalyticsEvent per ogni strumento ( FacebookAnalyticsEvent , GoogleAnalyticsEvent ) che è conforme al protocollo precedente e implementa il metodo sendEvent . Ciascuna di queste classi avrebbe il proprio metodo init .
  3. Classe di distribuzione centrale che accetta una matrice di oggetti id<AnalyticsProtocol> e chiama sendEvent su ognuno di essi.

Hai qualche idea migliore? Grazie.

    
posta skornos 07.01.2016 - 20:02
fonte

2 risposte

3

È importante per te possedere la soluzione a questo problema? Sembra che quello di cui hai bisogno sia già disponibile da terze parti (ho usato link ).

Da quando hai chiesto un pattern di progettazione software; il modello di strategia potrebbe essere utile. È possibile definire un'interfaccia comune per la segnalazione degli eventi e implementare una strategia per ciascuno dei servizi di analisi. È anche possibile creare una strategia aggregata conforme alla stessa interfaccia e inoltrare un evento a diverse altre strategie quando si utilizzano molti servizi di analisi contemporaneamente.

    
risposta data 07.01.2016 - 20:33
fonte
2

Each of them uses their custom SDK to log an event which comes with its own method to send an event and its own parameters. I would love to refactor it and create a module where adding new analytics tool wouldn't lead to code smell and in best case scenario there would be a central place which would dispatch the events at once.

Questo sembra il modello di adattatore:

Intent

  • Convert the interface of a class into another interface clients expect.

  • Adapter lets classes work together, that could not otherwise because of incompatible interfaces.

E dallo stesso link:

Adapter Pattern and Strategy Pattern

Adapter Pattern and Strategy Pattern - there are many cases when the adapter can play the role of the Strategy Pattern. If we have several modules implementing the same functionality and we wrote adapters for them, the adapters are implementing the same interface. We can simply replace the adapters objects at run time because they implements the same interface.

    
risposta data 08.01.2016 - 16:16
fonte