2016-10-07 44 views
0

這是一個關於代碼組織和最佳實踐的問題。過程數據 - 在服務還是控制器?

使用$ resource從api中檢索數據,我需要在將數據發送到視圖之前對其進行處理。

我的問題是在什麼步驟來處理實際的數據。我的理解是它應該在服務中完成,但我也想在控制器內部進行實際的ajax調用。

就像現在一樣,我注入服務並使用像CdnService.sumOfVolumeRequest(response)這樣的函數來處理數據。

我是對的還是有更好的辦法?

服務

function updateVolumeRequest() { 
    var params = { 
     metric: "size", 
     tStart: convertUtcToEpoch(SearchCriteria.criteria.dateFrom), 
     tEnd: convertUtcToEpoch(SearchCriteria.criteria.dateTo) 
    }; 
    return params; 
    } 

    function volumeRequest() { 
    return CdnAnalyticsFactory.statsByDimension({ 
      accountId: Token.UserInfo().Id 
     }, 
     updateVolumeRequest()) 
     .$promise; 
    } 

控制器:

function getData() { 
    var data; 

    CdnService.sizeRequest(SearchCriteria.criteria.dateFrom, SearchCriteria.criteria.dateTo) 
     .then(function onSucess(response) { 
     data = CdnService.sumOfVolumeRequest(response) 

     }); 

}

回答

2

請參考John Papa's Angular Style Guide

重構邏輯,用於進行數據操作並與工廠交互數據。使數據服務負責XHR調用,本地存儲,存儲器存儲或任何其他數據操作。

問題是這樣的:服務應該是模塊化的嗎?您是否應該能夠在另一個控制器中注入相同的服務並保持相同的功能並使其即插即用?

如果您希望服務是自給自足的,那麼最好是在服務本身中使用數據。這個想法是讓服務在每次調用時都以所需的格式提供數據。如果您將某些功能移出,那麼需要重複該代碼。這違背了DRY原則。

當然,這取決於你到需要在服務中發生什麼樣的數據處理量以及需要在外部發生什麼量。

如果您在控制器中編寫的代碼是特定於您的控制器的邏輯,那麼可以在控制器中編寫它。但最好不要包含每次調用服務時都需要重複的代碼。

1

這取決於上下文。

如果邏輯是獨立視圖中,可以將代碼移到service,這樣就可以在其它控制器重用然而,如果有一個視圖特定邏輯可以在controller

相關問題