これは、AngularJS アプリを作成しているときに熟考してきたものです。AngularJS ファクトリについて初めて知ったとき、それらの賢い使い方の 1 つは、単純なオブジェクトではなくコンストラクタ関数を作成して返すことだと思いました。つまり、次のようなものです。
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 対応のコンテキスト内で作業している場合は正常に機能することですが、たとえば、コンソールからコンストラクターを呼び出したり、Web ワーカーで使用したり、非AngularJS アプリでは、 AngularJS を使用するのではなく、AngularJSを回避する必要があります。javascript の関数がすでに「シングルトン」であり、インスタンス化の助けが必要ないように見える限り、このアプローチは間違っているのではないかと思い始めました。
AngularJS ファクトリーを誤用していませんか? グローバルスコープに公開されたコンストラクター関数を使用したほうがよいでしょうか? より一般的には、AngularJS ファクトリ/サービス/プロバイダーのグローバル オブジェクトまたはその逆の使用を促進する特定の要因はありますか?