AngularJS: le differenze tra service e factory spiegate una volta per tutte

Se anche voi lavorate quotidianamente con AngularJS, uno degli interrogativi che periodicamente vi verranno alla mente è la differenza tra un service ed una factory. In rete ci sono tonnellate di risorse che cercano di spiegare la differenza tra i due paradigmi, e StackOverflow pullula di esperti che si prodigano nel dare risposte a questo interrogativo.

maxresdefault

Personalmente trovo oltremodo utile questo articolo di Thoughtram che periodicamente mi vado a rileggere quando mi dimentico la differenza fondamentale tra le due cose. I punti che vorrei sintetizzarvi sono:

  • service() è una funzione del nostro modulo in AngularJS che prende come input il nome del servizio che vogliamo definire e una funzione, il servizio sarà poi iniettabile in componenti come controller, direttive e filtri.
  • factory() è una funzione del nostro modulo in AngularJS che prende come input il nome della factory che vogliamo definire e una funzione, la factory sarà poi iniettabile in componenti come controller, direttive e filtri.
  • Nel service i vari metodi sono definiti nel this della funzione che lo definisce, mentre nella factory la funzione restituisce semplicemente un oggetto di tipo letterale
  • Quando definiamo un service passiamo infatti ad AngularJS il costruttore della funzione che verrà istanziata, mentre per quanto riguarda la factory la funzione che passiamo al framework sarà quella che verrà direttamente chiamata quando la richiamaremo all’interno dei nostri componenti.
  • I service ci permettono di usare le classi di ES6 e quindi ove possibile conviene usare questi ultimi. Riporto un esempio qui sotto:

    class MyService {
      sayHello() {
        console.log('hello');
      }
    }
    
    app.service('MyService', MyService);

Come al solito chiunque abbia qualcosa da aggiungere a riguarda lo faccia ora nei commenti qui sotto o taccia per sempre.

Rispondi