È una buona idea usare il pattern Singleton per un gestore API?

3

Quindi in pratica sto scrivendo un wrapper per un'API REST nell'obiettivo-c in modo che i nostri clienti possano facilmente usarli nel loro sviluppo iOS.

Sto cercando di trovare un buon modello di design per questo scopo, sembra che Singleton Design Pattern sia l'unica scelta qui. Senza un inizializzatore pubblico, è un gestore condiviso accessibile chiamando una funzione e quindi ogni controller della propria app può accedervi.

Sto cercando un consiglio per tale scopo: progettare un wrapper per API. Dovrei usare il modello di design Singleton? O dovrei permettere loro di ereditare questa classe e crearla a proprio rischio?

    
posta Frank Joe 28.07.2018 - 02:13
fonte

2 risposte

3

Generalmente il consiglio è di non usare il modello singleton per implementare le variabili globali.

Tuttavia, qui il tuo obiettivo sembra essere "Implementa una variabile globale" in quanto ciò renderà "facile" per il tuo cliente.

Potresti avere ragione, le variabili globali rendono facile l'avvio e il funzionamento con qualcosa. Se il tuo cliente ha bisogno di aiuto per scrivere un client per la tua API forse è esattamente il tipo di aiuto che vogliono e di cui hai bisogno.

Tuttavia, vorrei fare entrambe le cose, consentire l'istanziazione del client se necessario E fornire una classe wrapper singleton per i principianti.

Questo ti coprirà per gli altri clienti più avanzati che vogliono fare cose che il singleton previene, offrendoti anche il facile tutorial di codice "basta farlo funzionare" per i tuoi clienti della "mia prima app"

    
risposta data 28.07.2018 - 15:11
fonte
1

Raccomando questo approccio. Suggerisco che invece di farlo, tu crei un'estensione su URLRequest che contiene un metodo di classe per ogni tipo di richiesta che può essere fatta alla tua API. Questi metodi dovrebbero restituire un URLRequest correttamente costruito.

Quando l'utente della biblioteca vuole fare una richiesta, può semplicemente costruire la richiesta URL e passarla a URLSession, AFNetworking o qualsiasi altra libreria di rete che scelgono di usare / creare.

È molto più flessibile, componibile e verificabile.

    
risposta data 01.09.2018 - 01:59
fonte

Leggi altre domande sui tag