私は、チームのために標準化された Javascript コーディング スタイルを考え出すために研究を行ってきました。現在、ほとんどのリソースは、次のようなクロージャーを含む「モジュール」パターンを推奨しています。
var Module = function() {
someMethod = function() { /* ... */ };
return {
someMethod: someMethod
};
}();
のように呼び出しModule.someMethod();
ます。このアプローチは、従来の OOP コンテキストで静的になるメソッドでのみ機能するようです。たとえば、データをフェッチ/保存するリポジトリ クラス、外部リクエストを作成するサービス レイヤーなどです。私が何かを見逃していない限り、モジュール パターンは、通常、サービス メソッドとの間で UI グルー コードに渡す必要があるデータ クラス (DTO と考えてください) で使用することを意図していません。
引用されている一般的な利点は、Javascript でモジュール パターンを使用して真のプライベート メソッドとフィールドを使用できることですが、これは、次のような「古典的な」Javascript スタイルで静的メソッドまたはインスタンス メソッドを使用できることと合わせて実現することもできます。
myClass = function(param) {
// this is completely public
this.publicProperty = 'Foo';
// this is completely private
var privateProp = param;
// this function can access the private fields
// AND can be called publicly; best of both?
this.someMethod = function() {
return privateProp;
};
// this function is private. FOR INTERNAL USE ONLY
function privateMethod() {
/* ... */
};
}
// this method is static and doesn't require an instance
myClass.staticMethod = function() { /* ... */ };
// this method requires an instance and is the "public API"
myClass.prototype.instanceMethod = function() { /* ... */ };
私の質問は、モジュール パターンが従来のスタイルよりも優れている理由は何だと思いますか? 少しすっきりしていますが、それがすぐにわかる唯一の利点のようです。実際、従来のスタイルは、単に静的メソッドのみのコレクションを返すのではなく、実際のカプセル化 (Java や C# などの真の OOP 言語と同様) を提供する機能を提供しているようです。
足りないものはありますか?