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

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

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

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

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

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

Мой способ взаимодействия с серверными разработчиками - Программирование iOS
Всем привет! После участившихся проблем во взаимодействии между мной, как mobile-разработчиком и серверной "командой", я, вместо того,...

Архитектура приложения - Программирование iOS
Здравствуйте, хочу написать приложение для iphone, которое каждый день выводит на экран несколько слов из русско-английского словаря для...

архитектура iOS - Программирование iOS
Добрый день, может кто подскажет литературу по архитектуре операционной системе iOS, ядре и других технических характеристиках. спасибо!

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

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

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

Не по теме:

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


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

А в целом - да, подход явно лучше всяких синглтонов, но в итоге будет удобнее реализовать какую-то статическую фабрику для создания запросов, чтобы пользователю не пришлось заморачиваться тонкостями создания и выполнения этих запросов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 12:11     Архитектура для сетевого взаимодействия в приложении
Еще ссылки по теме:

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

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

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

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

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


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

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

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