Padrões de design do AngularJS: Devo usar fábricas para criar funções de construtor?

Isso é algo sobre o qual venho meditando enquanto criava um aplicativo AngularJS. Quando aprendi sobre as fábricas do AngularJS, achei que um uso inteligente delas seria criar e retornar uma função de construtor em vez de um objeto simples, ou seja, algo como:

app.factory("Foo", function() {
  function Foo(bar, baz) {
    this.bar = bar;
    this.baz = baz;
    ...
  }

  Foo.prototype = {
    constructor: Foo,
    method1: function() { ... },
    method2: function() { ... },
    ...,
    methodn: function() { ... },
  };

  return Foo;
});

Então, você poderia injetar a função em seus controladores e chamá-lo comnew. Achei isso esteticamente agradável e OOP-y, mas agora estou começando a pensar que na verdade é um antipadrão. O problema é que ele funciona bem quando você está trabalhando em contextos com reconhecimento de AngularJS, mas, uma vez que você queira, por exemplo, chamar o construtor do console, usá-lo em um Web Worker ou reutilizá-lo em um não Aplicativo AngularJS, você começa a ter que trabalharpor aí AngularJS e não com ele. Comecei a me perguntar se essa abordagem era equivocada na medida em que as funções em javascript já parecem ser "singletons" e não parecem precisar de nenhuma ajuda para serem instanciadas.

Estou usando mal as fábricas da AngularJS? Eu estaria melhor servido com funções de construtor expostas ao escopo global? Mais geralmente, existem fatores específicos que promovem o uso de fábricas / serviços / provedores AngularJS sobre objetos globais ou vice-versa?

questionAnswers(2)

yourAnswerToTheQuestion