¿Dónde debo colocar los métodos que hacen una solicitud Http para obtener datos de un servicio web en el desarrollo de iOS?

9

Tengo un modelo de automóvil en mi aplicación iOS donde sus parámetros como nombre, año, valor, etc. se obtienen de un servicio web para completar una lista con los datos de los automóviles.

¿Dónde debo poner el método que asincrónicamente va al servidor y devuelve una matriz de automóviles (este método ya convierte el JSON en una matriz de automóviles)?

Mi enfoque actual es un método estático en mi clase de Automóvil que recibe un HttpClient (por lo que puedo probarlo burlándose del cliente) y devuelve una NSArray de automóviles, ¿es bueno?

¿Qué han hecho ustedes en esta situación?

Estoy preocupado porque recientemente comencé a leer código limpio que dice que una Clase debería hacer solo una cosa, y la forma en que lo hago ahora parece hacer 2 cosas (mantener información sobre un automóvil y obtener una lista de automóviles).

Raphael Oliveira
fuente

Respuestas:

4

Recomendaría un objeto CarBroker que maneja solicitudes de automóviles y expone métodos como:

  1. getCars : para obtener una lista de todos los automóviles.
  2. getCarByID : para un automóvil específico.

Además, dicho objeto puede manejar la solicitud de otros corredores de automóviles (si es necesario). De cualquier manera, tiene un área real de responsabilidad: Brokering Cars , en lugar de ser un objeto de automóvil con las responsabilidades de un objeto de automóvil y un corredor de objetos.

J-Boss
fuente
Esto suena bien porque ahora tiene un objeto Car limpio que puede reutilizarse. ¿Qué sucede si comienza a usar otro protocolo de acceso para obtener datos? En ese escenario que tiene un lugar para comenzar, sabe que todo lo que procesa \ reglas \ código lógico en un lado acepta objetos Car. Entonces puede comenzar a reimplementar el CarBroker usando REST o lo que sea, pero ya está a medio camino y no tiene que reprogramar y volver a probar la lógica que intrínsecamente solo está relacionada con una abstracción de Car .
Andyz Smith
1

Aquí, mantener otro objeto debería ser retenido en algún lugar que no pueda garantizarse que el padre siempre estará vivo para procesar la respuesta.

Sugiero mantener estas implementaciones en una clase singleton. Mantener esta clase también será útil para la implementación de algunos métodos genéricos que se pueden llamar con mucha frecuencia.

Oruvan
fuente
-1

Puede llamar al método asincrónico dentro del método ViewDidLoad cuando la matriz regrese de la web, actualice la vista. Puede guardar la matriz en la base de datos, por lo que no necesitará cargar datos de la web cada vez que se cargue el controlador de vista.

Aprendiz
fuente
3
¿Cómo responde esto a la pregunta que se hace?
mosquito