改进我的异步请求设计

时间:2011-02-27 09:54:57

标签: objective-c

我想对我的设计有一些看法。我的应用程序开始发送一个异步请求来获取一些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 :(得分:0)

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

使用块的实现看起来有点模糊:

- (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服务在其结束时执行所有检查,并在一个响应中返回所有数据,而不是要求所有这些返回 - -forth。