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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

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

02.01.2015, 16:30. Просмотров 634. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Архитектура для сетевого взаимодействия в приложении (Программирование iOS):

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

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

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

Еще архитектура взаимодействия - ООП и паттерны
Здравствуйте Навеяно соседней темой. Вот сейчас пишу UI (унылая рутинная работа), и засомневался верно ли делаю :) Принципиальные...

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

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

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

Не по теме:

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


В целом идея не нова.
Можете еще попробовать использовать базовый класс NSOperation для этого.
Это вам позволит оперировать запросами как операциями, включать их в очереди, и т.д.
1
Vorona
Peace 2 all shining faces
669 / 531 / 45
Регистрация: 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
08.01.2015, 12:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 12:11
Привет! Вот еще темы с ответами:

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

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу - C++ Builder БД
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и как ее исправить?

БД для взаимодействия с VB(.net?) - Программирование
Привет всем, Я пару-тройку лет назад довольно много программировал на VBA и Access, вплоть до 2000-ной версии. Потом дела сменились, и...

Класс для взаимодействия с вк апи - ActionScript
Добрый день! Продолжаю разрабатывать своё простенькое приложение. С визуальной частью пока нормально, и я решил заняться взаимодействием...


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

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

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