Модели дизайна 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