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