Улучшить мой асинхронный дизайн запросов - PullRequest
1 голос
/ 27 февраля 2011

Я хотел бы высказать свое мнение о дизайне, который у меня есть.Мое приложение начинает отправлять асинхронный запрос, чтобы получить некоторые данные JSON, и если это идет хорошо, я получаю свой метод обратного вызова, а затем запускаю другой асинхронный запрос для некоторых данных, затем в другом обратном вызове я продолжаю, и я чувствую, что мой кодстановясь похожим на спагетти-код, я перехожу с одного метода обратного вызова на запрос к другому обратному вызову, затем запрашиваю и так далее, есть идеи по улучшению дизайна?

Позвольте мне показать пример кода (не реальный код, нопоказывает мою точку зрения):

-(void)startApp { //make an request and use callBackMethod to parse data }

-(void)callBackMethod { //parse data and check it, if ok go make next request and use CallBackMethod1 }

-(void)callBackMethod1 { //parse data and check it, if ok go make next request and use CallBackMethod2 }

-(void)callBackMethod2 { //parse data and check it, if ok go make next request and use CallBackMethod3 }

-(void)callBackMethod3 { //parse data }

Вы поняли.По моему мнению, это беспорядок, и я хочу изменить код на что-то более удобочитаемое и более простое в обслуживании.Я слышал о блоках.Не уверен, как / если это может улучшить мой дизайн.

donnib

1 Ответ

0 голосов
/ 27 февраля 2011

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

Реализация, использующая блоки, будет выглядеть примерно так:

- (void)startApp {
    [self makeRequest:... completionHandler:^(NSData *data){
        // Parse data and check it, as in callBackMethod
        if (ok) [self makeRequest:... completionHandler:^(NSData *data){
            // Parse data and check it, as in callBackMethod1
            if (ok) [self makeRequest:... completionHandler:^(NSData *data){
                // Parse data and check it, as in callBackMethod2
                if (ok) [self makeRequest:... completionHandler:^(NSData *data){
                    // Parse data, as in callBackMethod3
                }];
            }];
        }];
    }];
}

В зависимости от ситуации, это может быть или не быть легче следовать. Другой вариант, если вы управляете веб-сервисом, к которому вы обращаетесь, и «проверка» доступна, - это заставить веб-сервис выполнять всю проверку по его завершению и возвращать все данные в одном ответе вместо того, чтобы требовать все это -forth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...