Я разработчик iOS с некоторым опытом, и этот вопрос мне очень интересен. Я видел много разных ресурсов и материалов по этой теме, но тем не менее я все еще смущен. Какая лучшая архитектура для сетевого приложения iOS? Я имею в виду базовую абстрактную структуру, шаблоны, которые будут соответствовать каждому сетевому приложению, будь то небольшое приложение, в котором есть только несколько запросов сервера или сложный клиент REST. Apple рекомендует использовать MVC
как базовый архитектурный подход для всех приложений iOS, но ни MVC
, ни более современные шаблоны MVVM
не объясняют, куда поместить сетевой логический код и как его организовать в целом.
Мне нужно разработать что-то вроде MVCS
(S
для Service
), а на этом уровне Service
положить все запросы API
и другую сетевую логику, которая в перспективе может быть действительно сложной? Проведя некоторые исследования, я нашел для этого два основных подхода. Здесь было рекомендовано создать отдельный класс для каждого сетевого запроса к веб-сервису API
(например, класс LoginRequest
class или PostCommentRequest
и т.д.), который все наследует от абстрактного класса базового запроса AbstractBaseRequest
и в дополнение к созданию некоторого глобального сетевого менеджера, который инкапсулирует общий сетевой код и другие настройки (может быть настройка AFNetworking
или RestKit
, если у нас есть сложные отображения объектов и постоянство или даже собственную реализацию сетевой коммуникации со стандартным API). Но этот подход кажется для меня накладными. Другим подходом является наличие диспетчера или диспетчера oneton API
, как в первом подходе, , но не для создания классов для каждого запроса и вместо этого для инкапсуляции каждого запроса в качестве общедоступного метода экземпляра этого класса менеджера например: fetchContacts
, loginUser
методы и т.д. Итак, что является лучшим и правильным способом? Есть еще другие интересные подходы, которые я еще не знаю?
И должен ли я создать еще один слой для всего этого сетевого материала, такого как Service
или NetworkProvider
или что-то еще поверх моей архитектуры MVC
, или этот слой должен быть интегрирован (добавлен) в существующие слои MVC
например Model
?
Я знаю, что существуют красивые подходы, или как тогда такие мобильные монстры, как клиент Facebook или клиент LinkedIn, сталкиваются с экспоненциально растущей сложностью сетевой логики?
Я знаю, что нет точного и формального ответа на проблему. Цель этого вопроса - собрать наиболее интересные подходы от опытных разработчиков iOS. Наилучший предлагаемый подход будет отмечен как принятый и отмеченный наградой за репутацию, другие будут поддержаны. Это в основном теоретический и исследовательский вопрос. Я хочу понять базовый, абстрактный и правильный архитектурный подход для сетевых приложений в iOS. Я надеюсь получить подробное объяснение от опытных разработчиков.