Модели дизайна AngularJS: Должен ли я использовать фабрики для создания функций конструктора?

Это то, что я обдумывал, создавая приложение AngularJS. Когда я впервые узнал о фабриках AngularJS, я подумал, что одним их умным использованием было бы создание и возврат функции конструктора, а не простого объекта, например:

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

Затем вы можете ввести эту функцию в свои контроллеры и вызвать ее с помощью new. Я нашел это эстетически приятным и OOP-y, но теперь я начинаю думать, что это на самом деле анти-шаблон. Проблема в том, что он отлично работает, когда вы работаете в контекстах, поддерживающих AngularJS, но как только вы хотите, например, вызвать конструктор из консоли, использовать его в веб-рабочем или повторно использовать код в не- Приложение AngularJS, вы начинаете работать с AngularJS, а не с ним. Я начал задаваться вопросом, был ли этот подход ошибочным, поскольку функции в javascript уже кажутся "одиночными" и, похоже, не нуждаются в создании какой-либо помощи.

Я злоупотребляю фабриками AngularJS? Будет ли лучше работать с функциями-конструкторами, открытыми для глобальной сферы? В более общем плане, существуют ли конкретные факторы, которые способствуют использованию заводов/служб/поставщиков AngularJS по глобальным объектам или наоборот?

Ответы

Ответ 1

Да!

Заводы Синтаксис: module.factory('factoryName', function); Результат: При объявлении factoryName в качестве аргумента для инъекций вы будете при условии, что значение возвращается, вызывая ссылку на функцию передан module.factory. Использование: может быть полезно для возврата "класс", который затем может быть создан для создания экземпляров.

Источник: https://groups.google.com/forum/#!msg/angular/56sdORWEoqg/HuZsOsMvKv4J

Вышеупомянутая ссылка также используется в качестве источника для комментария Барта: AngularJS: Служба против провайдера vs factory