Front End

21 mai, 2015

AngularJS: quando usar Service e Factory

Publicidade

Uma das dúvidas mais recorrentes entre os iniciantes em AngularJS é a diferença entre Service e Factory e quando exatamente devemos usar um ao invés do outro. Bom, pelo código-fonte você pode ver a resposta:

function factory(name, factoryFn) {  
    return provider(name, { $get: factoryFn }); 
} 
function service(name, constructor) {  
    return factory(name, ['$injector', function($injector) { 
        return $injector.instantiate(constructor); 
    }]); 
}

Dado que service simplesmente retorna factory, para o nosso uso diário eles são praticamente iguais. A diferença é o $injector.instantiate que cria uma nova instância de service.

AngularJS (1)

Em resumo, você pode usar qualquer um para resolver o seu problema mas, como regra geral, nós usamos as factories para funções “class-like”, nas quais você pode adicionar propriedades e atributos e retornar para um controller. Por exemplo:

app.factory('Person', function(){  
    return {
        name: "Matheus",
        age: 25,
        sayHello: function(text){
            return "Hello from Concrete!";
        }
    }               
});

E podemos usar services para compartilhar funções utilitárias. Por exemplo:

app.service('personService', function($http){  
    this.getPersonInfo = function(personId){
        return $http.get("/Person/", { params: {PersonId: personId });
    };        
});

Entendido? Neste link da documentação oficial do AngularJS tem mais explicações para quem quer entender melhor.

Se tiver alguma dúvida, sugestão ou crítica, é só deixar no campo abaixo. Espero ter ajudado! Até a próxima.