Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
1

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

02.01.2015, 16:30. Просмотров 691. Ответов 3
Метки нет (Все метки)

Всем новогодний привет!))

Хотел бы поинтересоваться, как кто предпочитает организовывать у себя в проектах взаимодействие с 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 { ... }
    }];
Что вы скажете насчет такого подхода? Буду рад комментариям и критике))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2015, 16:30
Ответы с готовыми решениями:

Какой формат нужен в приложении для ввода формул и графиков
Всем добрый вечер! Мы разрабатываем мобильное приложение с лекциями, тестами и...

Литература для изучения сетевого взаимодействия
Привет ребят! У меня вопрос такой, я почти дочитываю брюс эккеля и всё довольно...

Архитектура взаимодействия UI компонентов
Hello world! Имеем WYSIWYG редактор, его UI разбит на виджеты. Предположим что...

Еще архитектура взаимодействия
Здравствуйте Навеяно соседней темой. Вот сейчас пишу UI (унылая рутинная...

Архитектура взаимодействия приложения C++ и БД веб-сайта
Коллеги, прошу помочь мне с архитектурой программного решения. Имеется...

3
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
02.01.2015, 18:11 2

Не по теме:

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


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

А в целом - да, подход явно лучше всяких синглтонов, но в итоге будет удобнее реализовать какую-то статическую фабрику для создания запросов, чтобы пользователю не пришлось заморачиваться тонкостями создания и выполнения этих запросов
1
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
08.01.2015, 12:11  [ТС] 4
Спасибо вам, Vorona и zulkis, за ответы!
Полезная информация, буду корректировать свою организацию))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 12:11

Организация прямого сетевого взаимодействия между устройствами
Здравствуйте. Сабж. Например для медиа связи. Учитывая, что адреса у...

Архитектура MVVM в многооконном приложении
Приветствую, ребята. Подскажите пожалуйста, кто как проектирует MVVM при...

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru