iPhone — архитектура для viewController и сетевых запросов

Итак, у меня есть 2 типа данных, некоторые нужно сохранять, а некоторые нет.

Я думаю о том, куда поместить весь мой сетевой код, внутри моих UIViewControllers, откуда начинаются все сетевые запросы, или на другом уровне.

Я имел в виду следующее:

Иметь слой с именем NetworkManager. NetworkManagerотвечает за все вызовы моих веб-служб.

Для данных, которые должны быть постоянными и могут быть представлены в виде списка, я бы попросил сетевого менеджера выдать запрос, сохранить ответ в моей локальной базе данных основных данных и заставить мой UIViewControllerслушать это. данные с помощью FetchResultsController.

Но есть много других типов запросов. Например: запрос на вход, запрос информации о пользователе, friendsNearBy и так далее… некоторые не должны быть постоянными в моей базе данных, а некоторые не соответствуют архитектуре FRC.

Для этого типа запроса, насколько я вижу, есть 2 способа обработки:

1. Иметь еще один уровень, который разделяет ViewControllers и NetworkManager. Назовем его Медиатор. Посредникполучает запрос словаря (JSON) от networkManager, решает в соответствии с логикой приложения, нужно ли с ним что-то еще делать, а затем публикует уведомление с соответствующим именем и данными.Если посредник сохраняет UIViewController, выдавший запрос, он может делегировать ответ непосредственно ему, вместо публикации уведомления.

Поток будет таким:

MyUiViewController - > Mediator -> NetworkManger->Mediator-> PostNotification (or directly back to MyUiViewController)

Pros:
Decoupling
Nice structure and separation of concerns

Cons:
Harder to code
Sometimes harder to understand and debug.

2. Не имея этой трехуровневой архитектуры, но вместо этого имея MyUiViewControllers, выдайте сетевой запрос с блоками. Это означает, что вместо того, чтобы Посредник перехватывал ответ до MyUiViewController, просто позвольте MyUiViewController обрабатывать ответ, используя блоки, поскольку именно он его выдает.

Pros:
Simple and quick to code
Easy to understand

Cons:
Coupling of network code inside your controllers

Я надеялся получить предложения и комментарии о том, что лучше из опыта людей, или о другом/лучшем способе сделать это.

10
задан Idan 31 March 2012 в 10:20
поделиться