Шаблоны проектирования 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
, Я нашел это эстетически и ООП-у, но теперь я начинаю думать, что это на самом деле анти-паттерн. Проблема в том, что он отлично работает, когда вы работаете в контекстах, поддерживающих AngularJS, но когда вы захотите, например, вызвать конструктор из консоли, использовать его в Web Worker или повторно использовать код в не Приложение AngularJS, вы начинаете работатьоколо AngularJS, а не с ним. Я начал задаваться вопросом, был ли этот подход ошибочным, поскольку функции в javascript уже кажутся «одиночками» и не нуждаются в какой-либо помощи при создании экземпляра.
Я неправильно использую фабрики AngularJS? Буду ли я лучше обслужен с функциями конструктора, открытыми для глобальной области видимости? В более общем смысле, существуют ли конкретные факторы, способствующие использованию фабрик / сервисов / провайдеров AngularJS над глобальными объектами или наоборот?