Onde devo colocar métodos que fazem uma solicitação Http para obter dados de um serviço da Web no desenvolvimento do iOS?

9

Eu tenho um modelo de carro no meu aplicativo iOS, onde parâmetros como nome, ano, valor etc. são buscados em um serviço da web para preencher uma lista com dados de carros.

Onde devo colocar o método que vai de forma assíncrona ao servidor e retorna uma matriz de carros (esse método já converte o JSON em uma matriz de carros)?

Minha abordagem atual é um método estático na minha classe Car que recebe um HttpClient (para que eu possa testá-lo com zombaria do cliente) e retorna um NSArray de carros, isso é bom?

O que vocês fizeram nessa situação?

Estou preocupado porque recentemente comecei a ler um código limpo, que diz que uma classe deve fazer apenas uma coisa, e o jeito que eu faço agora parece fazer duas coisas (mantenha informações sobre um carro e obtenha uma lista de carros).

Raphael Oliveira
fonte

Respostas:

4

Eu recomendaria um CarBroker Object que lida com solicitações de carros e expõe métodos como:

  1. getCars - para obter uma lista de todos os carros.
  2. getCarByID - para um carro específico.

Além disso, esse objeto pode lidar com solicitações de outros corretores de automóveis (se necessário). De qualquer maneira, ele possui uma área de responsabilidade real - Corretora de carros - em vez de ser um Objeto de carro com as responsabilidades de um Objeto de carro e um Corretor de objetos.

J-Boss
fonte
Parece bom porque agora você tem um objeto Car limpo que pode ser reutilizado. E se você começar a usar outro protocolo de acesso para obter dados? Nesse cenário, você tem um ponto de partida, você sabe que todo o código de processamento \ rules \ logic de um lado aceita objetos Car. Em seguida, você pode começar a reimplementar o CarBroker usando REST ou qualquer outra coisa, mas você já está no meio do caminho e não precisa reprogramar e testar novamente a lógica intrinsecamente relacionada apenas à abstração do carro .
21713 Andyz Smith
1

Aqui, manter outro objeto deve ser mantido em algum lugar que não possa ser garantido que o pai sempre estará vivo para processar a resposta.

Sugiro manter essas implementações em uma classe singleton. Manter essa classe também será útil para alguma implementação genérica de método que pode ser chamada com muita frequência.

Oruvan
fonte
-1

Você pode chamar o método assíncrono dentro do método ViewDidLoad quando a matriz retornar da Web, atualizar a exibição. Você pode salvar a matriz no banco de dados, para que você não precise carregar dados da Web toda vez que o Viewcontroller carregar.

Aprendiz
fonte
3
Como isso responde à pergunta?
gnat