2016-10-07 5 views
0

Dies ist eine Frage zu Code-Organisation und Best Practices.Prozessdaten - im Service oder Controller?

Ich retreiving Daten von einem API mit $ Ressource und ich muss es verarbeiten, bevor Sie es an die Ansicht senden.

Meine Frage ist in welchem ​​Schritt die eigentlichen Daten zu verarbeiten. Mein Verständnis ist, dass es im Service gemacht werden sollte, aber ich möchte auch den tatsächlichen Ajax-Anruf innerhalb des Controllers machen.

Wie es jetzt ist, injiziere ich den Dienst und Funktionen wie CdnService.sumOfVolumeRequest (Antwort) verwenden, um die Daten zu verarbeiten.

Mache ich es richtig oder gibt es einen besseren Weg?

Dienst:

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; 
    } 

Controller:

function getData() { 
    var data; 

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

     }); 

}

Antwort

2

Bitte beachten Sie John Papa's Angular Style Guide

Refactor-Logik zum Ausführen von Datenoperationen und zur Interaktion mit Daten in einer Fabrik. Sorgen Sie dafür, dass Datendienste für XHR-Aufrufe, lokalen Speicher, das Speichern im Speicher oder andere Datenvorgänge verantwortlich sind.

Die Frage ist wirklich das: Sollte der Service modular sein? Sollten Sie in der Lage sein, den gleichen Dienst in einen anderen Controller zu injizieren und die gleiche Funktionalität beizubehalten und es plug and play zu machen?

Wenn Sie möchten, dass der Dienst autark ist, dann ist es besser, die Daten im Dienst selbst zu verwirren. Die Idee ist, dass der Dienst Ihnen jedes Mal, wenn er aufgerufen wird, Daten im erforderlichen Format zur Verfügung stellt. Wenn Sie einen Teil der Funktionalität entfernen, muss dieser Code wiederholt werden. Dies ist gegen das DRY-Prinzip.

Natürlich liegt es an Ihnen, , welche Menge an Datenmanipulation innerhalb des Dienstes passieren muss und welche Menge außerhalb passieren muss.

Wenn der Code, den Sie in den Controller schreiben, Logik für Ihren Controller ist, dann ist es in Ordnung, es in den Controller zu schreiben. Es ist jedoch ratsam, keinen Code einzufügen, der bei jedem Aufruf des Dienstes wiederholt werden muss.

1

Es hängt vom Kontext ab.

Wenn die Logik ist der Ansicht, unabhängig Sie den Code zu service bewegen können, so dass Sie es in anderen Controllern jedoch wiederverwenden können, wenn es eine Ansicht spezifische Logik ist, können Sie in controller

schreiben
Verwandte Themen