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:
- Definizione di un protocollo
AnalyticsProtocol
che richiede l'implementazione del metodosendEvent
- Definizione della classe
AnalyticsEvent
per ogni strumento (FacebookAnalyticsEvent
,GoogleAnalyticsEvent
) che è conforme al protocollo precedente e implementa il metodosendEvent
. Ciascuna di queste classi avrebbe il proprio metodoinit
. - Classe di distribuzione centrale che accetta una matrice di oggetti
id<AnalyticsProtocol>
e chiamasendEvent
su ognuno di essi.
Hai qualche idea migliore? Grazie.