Где я должен поместить методы, которые делают запрос Http для получения данных от веб-службы в разработке iOS?

9

У меня есть приложение Model Car в моем iOS-приложении, где его параметры, такие как имя, год, значение и т. Д., Извлекаются из веб-службы, чтобы заполнить список данными об автомобилях.

Куда мне поместить метод, который асинхронно отправляется на сервер и возвращает массив машин (этот метод уже преобразует JSON в массив Car)?

Мой текущий подход - статический метод в моем классе Car, который получает HttpClient (так что я могу выполнить модульное тестирование, которое издевается над клиентом) и возвращает NSArray из автомобилей, это хорошо?

Что вы, ребята, сделали в этой ситуации?

Я обеспокоен, потому что я недавно начал читать чистый код, который говорит, что класс должен делать только одну вещь, а то, как у меня сейчас получается, делает две вещи (хранит информацию об автомобиле и получает список автомобилей).

Рафаэль Оливейра
источник

Ответы:

4

Я бы порекомендовал объект CarBroker, который обрабатывает запросы на автомобили и предоставляет такие методы, как:

  1. getCars - для получения списка всех автомобилей.
  2. getCarByID - для конкретной машины.

Кроме того, такой объект может обрабатывать запросы от других автомобильных брокеров (если это необходимо). В любом случае у него есть одна реальная область ответственности - Brokering Cars - в отличие от объекта Car с обязанностями объекта Car и брокера объектов.

J-Босс
источник
Это звучит хорошо, потому что теперь у вас есть чистый автомобильный объект, который можно использовать повторно. Что если вы начнете использовать другой протокол доступа для получения данных? В этом сценарии вам есть с чего начать, вы знаете, что все, что вы обрабатываете \ правила \ логический код на одной стороне, принимают объекты Car. Затем вы можете начать повторную реализацию CarBroker, используя REST или что-то еще, но вы уже на полпути и вам не нужно перепрограммировать и повторно тестировать логику, которая по своей сути связана только с абстракцией Car .
Andyz Smith
1

Здесь необходимо хранить где-то другой объект, который не может быть гарантирован, что родитель всегда будет жив, чтобы обработать ответ.

Я предлагаю сохранить эти реализации в одном классе. Сохранение этого класса также будет полезно для реализации некоторых общих методов, которые можно вызывать очень часто.

Oruvan
источник
-1

Вы можете вызвать асинхронный метод внутри метода ViewDidLoad, когда массив возвращается из сети, обновите представление. Вы можете сохранить массив в базе данных, поэтому вам не нужно будет загружать данные из сети каждый раз при загрузке Viewcontroller.

ученик
источник
3
как это отвечает на заданный вопрос?
комнат