2011-02-27 100 views
1

我想就我設計的一些意見。我的應用程序開始發送一個異步請求來獲取一些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

你的異步請求的設計是好的,但你應該使用更具描述性的方法名。這裏的例子並不是真正的意大利麪條代碼,只是你正在做一些有點複雜的事情,代碼結構必然反映了這一點。

的實現使用塊將看起來依稀像這樣:

- (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服務完成所有的檢查並在一個響應中返回所有的數據,而不是要求所有這些都是回來的-向前。