Форум программистов, компьютерный форум CyberForum.ru

Архитектура для сетевого взаимодействия в приложении - Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
02.01.2015, 16:30     Архитектура для сетевого взаимодействия в приложении #1
Всем новогодний привет!))

Хотел бы поинтересоваться, как кто предпочитает организовывать у себя в проектах взаимодействие с server side?

У своих коллег вижу преимущественно что-то вроде синглтона, у которого есть куча методов с сигнатурой "запросить/отправить нечто с completion block'ом".
Как я пока из своего полуторагодового опыта понял, это самый распространенный вариант.

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

Мы имеем два обобщенных базовых класса вроде Request и Responce.
У класса Request, отбросив нюансы, есть два метода:
Objective-C
1
2
- (void)executeWithCompletion:(SomeBlockTypedef)completion
- (Responce *)responce
Также в нем определен базовый URL, с которым мы общаемся.

У класса Responce что-то в этом роде:
Objective-C
1
2
- (id)initWithResponceDict:(NSDictionary *)responceDict
- (NSArray *)parsedData
В наследнике класса Request, каком-нибудь NewsRequest, переопределяем метод init нужным образом. Например:
Objective-C
1
- (id)initWithPageNumber:(NSInteger)pageNumber count:(NSUInteger)count;
А в методе
Objective-C
1
- (Responce *)responce
возвращаем конкретный подкласс респонса - NewsResponce.
В котором, в свою очередь, реализован парсинг для каждого конкретного ответа.

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

Objective-C
1
2
3
4
5
6
7
8
9
10
Request *request = [[ConcreteRequest alloc] initWithFirstParam:x secondParam:y];
 
    [request executeWithCompletion:^(NSError *error) {
        if (!error) {
            NSArray *responceArray = [userRequest.responce parsedData];
            SomeClass *obj = [responceArray firstObject];
            ...
        }
        else { ... }
    }];
Что вы скажете насчет такого подхода? Буду рад комментариям и критике))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2015, 16:30     Архитектура для сетевого взаимодействия в приложении
Посмотрите здесь:

архитектура iOS
Архитектура приложения
Баги в приложении на UITableViewController
Objective-C Кеширование данных запросов в приложении
Клавиатура в приложении
Мой способ взаимодействия с серверными разработчиками
Не могу опубликовать приложении в appstore
Game Center в приложении
Звуковое сопровождение в приложении
Арабский язык в приложении
Мобильная версия сайта в приложении
Какой формат нужен в приложении для ввода формул и графиков

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
02.01.2015, 18:11     Архитектура для сетевого взаимодействия в приложении #2

Не по теме:

Response пишется через 's'.


В целом идея не нова.
Можете еще попробовать использовать базовый класс NSOperation для этого.
Это вам позволит оперировать запросами как операциями, включать их в очереди, и т.д.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
03.01.2015, 19:48     Архитектура для сетевого взаимодействия в приложении #3
Добавлю от себя, что намного удобнее было бы передавать response в completionBlock, а не создавать отдельный метод в API, т.к это не совсем интуитивно понятно и убирает лишнее чувство очередного состояния в виде хранения риспонса или каких-то данных, необходимых для его генерации на лету, которые вы получили после запроса

А в целом - да, подход явно лучше всяких синглтонов, но в итоге будет удобнее реализовать какую-то статическую фабрику для создания запросов, чтобы пользователю не пришлось заморачиваться тонкостями создания и выполнения этих запросов
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
08.01.2015, 12:11  [ТС]     Архитектура для сетевого взаимодействия в приложении #4
Спасибо вам, Vorona и zulkis, за ответы!
Полезная информация, буду корректировать свою организацию))
Yandex
Объявления
08.01.2015, 12:11     Архитектура для сетевого взаимодействия в приложении
Ответ Создать тему
Опции темы

Текущее время: 04:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru