Sto cercando di capire il modo migliore per progettare la mia app. Attualmente ho una classe wrapper attorno a CLLocationManager che si imposta come delegato e gestisce tutte le impostazioni e le logiche di business extra di cui abbiamo bisogno. È anche un singleton (sharedManager).Best practice per l'utilizzo di CoreLocation nei modelli vs controller
Mi piacerebbe essere il più fedele possibile a MVC e spingere la maggior parte della logica nei miei modelli, ma non sono sicuro dei modi migliori per farlo. Attualmente sia i controller che i modelli stanno ottenendo il SharedManager e i metodi di chiamata su di esso come il controllo della posizione è disponibile prima di presentare un modale (controller) o ottenere la posizione corrente prima di effettuare una chiamata REST (modello), ma ciò sembra molto accoppiato e difficile da testare.
Mi piacerebbe utilizzare il più possibile l'integrazione delle dipendenze per evitare di interrogare costantemente il metodo Singleton in tutte le parti del mio codice, ma non riesco a capire il modo migliore per farlo.
Alcune idee che ho avuto:
convertire il mio CLLocationManager wrapper per utilizzare la notifica di parlare con tutte le parti della app per migliorare il disaccoppiamento. Potrei quindi effettuare chiamate di avvio/arresto utilizzando il singleton, ma i miei controller/modelli reagiranno ai cambiamenti ascoltando le notifiche. Questo ancora non evita di dover usare il singleton dappertutto.
Utilizzare solo il singleton nel controller e trasferire i dati di posizione necessari al modello impostando le proprietà. Questo sembra che renderebbe più facile testare i miei modelli, ma non il mio controller e mettere il codice di posizione di Core nei controller è anche icky.
È possibile passare un'istanza del mio wrapper di location manager personalizzato impostando le proprietà su entrambi i modelli e controller, ma ciò sembra un po 'noioso e le immagini ferme lasciano la domanda su dove creare il gestore iniziale?
mi piacerebbe qualche consiglio da parte di persone che hanno pensato su questo problema più in profondità. Tutte le idee sono benvenute e apprezzate!
Il mio approccio sarebbe quello di mantenere il wrapper CLLocationManager, creando una classe aggiuntiva per gestire quanto più logica possibile, provare a mantenere i controller il più possibile il più possibile e impostare i dati usando le proprietà. Vorrei anche utilizzare le notifiche, se del caso, per evitare troppi accoppiamenti, ma è difficile essere più specifici senza requisiti dell'app. Spero che questo ti aiuti. – mxb