Dove devo mettere i metodi che fanno una richiesta HTTP per ottenere dati da un servizio web nello sviluppo di iOS?


9

Ho una Model Car nella mia applicazione iOS in cui i suoi parametri come nome, anno, valore ecc. Vengono recuperati da un servizio web per riempire un elenco con i dati delle auto.

Dove devo inserire il metodo che in modo asincrono va al server e restituisce un array di macchine (questo metodo converte già il JSON in un array di auto)?

Il mio approccio attuale è un metodo statico nella mia classe Car che riceve un HttpClient (quindi sono in grado di testare l'unità deridendo il client) e restituisce un NSArray di auto, va bene?

Cosa avete fatto ragazzi in questa situazione?

Sono preoccupato perché di recente ho iniziato a leggere il codice pulito che dice che una Classe dovrebbe fare solo una cosa, e il modo in cui ho ora sembra fare 2 cose (tenere informazioni su un'auto e ottenere un elenco di auto).

Risposte:


4

Vorrei raccomandare un oggetto CarBroker che gestisce le richieste di auto ed espone metodi come:

  1. getCars - per ottenere un elenco di tutte le auto.
  2. getCarByID - per un'auto specifica.

Inoltre un oggetto del genere può gestire la richiesta di altri broker automobilistici (se necessario). In entrambi i casi ha una vera area di responsabilità - Brokering Cars - invece di essere un oggetto auto con le responsabilità di un oggetto auto e un broker di oggetti.


Questo suona bene perché ora hai un oggetto Car pulito che può essere riutilizzato. Cosa succede se si inizia a utilizzare un altro protocollo di accesso per ottenere dati? In quello scenario hai un punto da cui cominciare, sai che tutto il codice di elaborazione \ regole \ logiche su un lato accetta gli oggetti Car. Quindi puoi iniziare a reimplementare il CarBroker usando REST o altro, ma sei già a metà strada e non devi riprogrammare e ripetere il test della logica che è intrinsecamente correlata solo a un'astrazione Car .
Andyz Smith,

1

In questo caso è necessario conservare un altro oggetto da qualche parte, il che non può essere garantito che il genitore sia sempre vivo per elaborare la risposta.

Suggerisco di mantenere queste implementazioni in una classe singleton. Mantenere questa classe sarà utile anche per l'implementazione di un metodo generico che può essere chiamato molto spesso.


-1

È possibile chiamare il metodo asincrono all'interno del metodo ViewDidLoad quando l'array ritorna dal web, aggiornare la vista. È possibile salvare l'array nel database, quindi non sarà necessario caricare i dati dal web ogni volta che si carica Viewcontroller.


3
come risponde alla domanda posta?
moscerino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.