Я разработчик 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. Я надеюсь получить подробное объяснение от опытных разработчиков.
