Objective c 改进我的异步请求设计

Objective c 改进我的异步请求设计,objective-c,Objective C,我想对我的设计提出一些意见。我的应用程序开始发送一个异步请求来获取一些JSON数据,如果顺利的话,我会使用回调方法,然后启动一些其他异步请求来获取一些数据,然后在另一个回调中,我会不断地重复,我觉得我的代码就像意大利面代码一样,我从一个回调方法跳到另一个回调方法,再跳到另一个回调方法,然后再跳到请求等等,有没有更好的设计 让我展示一些示例代码,不是真正的代码,而是我的观点: -空星塔普{ //发出请求并使用callBackMethod解析数据 } -无效回调方法{ //解析数据并检查它,如果确定

我想对我的设计提出一些意见。我的应用程序开始发送一个异步请求来获取一些JSON数据,如果顺利的话,我会使用回调方法,然后启动一些其他异步请求来获取一些数据,然后在另一个回调中,我会不断地重复,我觉得我的代码就像意大利面代码一样,我从一个回调方法跳到另一个回调方法,再跳到另一个回调方法,然后再跳到请求等等,有没有更好的设计

让我展示一些示例代码,不是真正的代码,而是我的观点:

-空星塔普{ //发出请求并使用callBackMethod解析数据 }

-无效回调方法{ //解析数据并检查它,如果确定,则发出下一个请求并使用CallBackMethod1 }

-voidcallBackMethod1{ //解析数据并检查它,如果确定,则发出下一个请求并使用CallBackMethod2 }

-voidcallBackMethod2{ //解析数据并检查它,如果确定,则发出下一个请求并使用CallBackMethod3 }

-voidcallBackMethod3{ //解析数据 }

你明白了。这是一个混乱后,我的意见,我想重构的代码,以更可读性和更容易维护。我听说了街区。我不确定这是否会使我的设计更好


donnib

您的异步请求设计很好,不过您应该使用更具描述性的方法名称。这里的示例并不是真正的意大利面代码,只是您正在做一些有点复杂的事情,代码结构必然反映了这一点

使用块的实现看起来大致如下:

- (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
                }];
            }];
        }];
    }];
}
视情况而定,这可能更容易遵循,也可能不容易遵循。另一种选择是,如果您控制正在查询的web服务,并且检查是可以进行的,则让web服务在其端执行所有检查,并在一个响应中返回所有数据,而不是要求来回执行所有这些操作