AngularJS: Wann wird der Service anstelle des Werks verwendet?

Bitte ertrage es hier mit mir. Ich weiß, dass es andere Antworten gibt, wie zum Beispiel:AngularJS: Service gegen Provider gegen Factory

Ich kann jedoch immer noch nicht herausfinden, wann Sie den Service über die Fabrik nutzen würden.

Soweit ich weiß, werden Factory-Funktionen häufig verwendet, um "allgemeine" Funktionen zu erstellen, die von mehreren Controllern aufgerufen werden können:Gemeinsame Steuerungsfunktionen erstellen

Die Angular-Dokumente scheinen die Fabrik dem Service vorzuziehen. Sie beziehen sich sogar auf "Service", wenn sie die Fabrik benutzen, was noch verwirrender ist!http://docs.angularjs.org/guide/dev_guide.services.creating_services

Wann würde man also den Service nutzen?

Gibt es etwas, das nur mit Service möglich oder viel einfacher ist?

Gibt es etwas anderes, was sich hinter den Kulissen abspielt? Performance / Speicherunterschiede?

Hier ist ein Beispiel. Abgesehen von der Deklarationsmethode scheinen sie identisch zu sein, und ich kann nicht herausfinden, warum ich eins gegen das andere tun würde.http://jsfiddle.net/uEpkE/

Aktualisieren: Aus der Antwort von Thomas geht hervor, dass Service für einfachere Logik und Factory für komplexere Logik mit privaten Methoden gedacht ist. Deshalb habe ich den folgenden Fiedel-Code aktualisiert und es scheint, dass beide Funktionen private Funktionen unterstützen können.

myApp.factory('fooFactory', function() {
    var fooVar;
    var addHi = function(foo){ fooVar = 'Hi '+foo; }

    return {
        setFoobar: function(foo){
            addHi(foo);
        },
        getFoobar:function(){
            return fooVar;
        }
    };
});
myApp.service('fooService', function() {
    var fooVar;
    var addHi = function(foo){ fooVar = 'Hi '+foo;}

    this.setFoobar = function(foo){
        addHi(foo);
    }
    this.getFoobar = function(){
        return fooVar;
    }
});

function MyCtrl($scope, fooService, fooFactory) {
    fooFactory.setFoobar("fooFactory");
    fooService.setFoobar("fooService");
    //foobars = "Hi fooFactory, Hi fooService"
    $scope.foobars = [
        fooFactory.getFoobar(),
        fooService.getFoobar()
    ];
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage