OOとは古典的なOOを意味します。モジュールパターンを使用してプライバシーを提供する「クラス」(javascriptには従来のクラスはありません)を定義することと、オブジェクトリテラルを使用して「パブリックスタティック」のコレクションを作成することの間を行き来しています。
どのタイプの組織を使用するかを決定できる「クラス」を作成するとき、私には指導力がありません。ええと、私のコードがjshintとjslintの両方をパスし、オプションが設定されていないという事実に加えて。
私は約1500行のコードで作業しているので、コードが管理できなくなる前に「ガイド力」が必要であり、それを廃棄する必要があります。
私はJavaScriptで「クラス」を書くさまざまな方法をよく知っています。AlexMacCawによって作成されたJavaScriptWebアプリケーションによって教えられたものと、ここにSOにリストされているさまざまな方法。
ただし、アプリケーションに関しては、どの方法を使用すればよいかわかりません。
最も単純なのは、次のようなオブジェクトリテラル内のメソッドと変数のコレクションのようです。
var public_statics = {
public_func: function () {},
public_var: "hello"
}
そして最も複雑なのは-IIFEのようです。
(function(){
var private_var;
function private_func(){
}
})();
どちらを使用するか、またはその間のバリエーションが多数あるかをどのように知ることができますか?
具体的な例として、MVCのコントローラーについてはどうでしょうか。
現在(そしてランダムに選択されたものもありますが)、私は次のようなコントローラーを実装しています:
var Co = {};
Co.Controller = function(){
// 'classes' from Mo are called here
// 'classes' from Su are called here
}
それから私はCoに他のコントロール関連の方法に取り組みます。
使用するOOのスタイルを選択するにはどうすればよいですか?
更新しました
私のライブラリは現在、4つの名前空間に分割されています。
var Mo = {},
Vi = {},
Co = {},
Su = {};
モデル、ビュー、コントローラーは自明である必要があり、(サポート)サポートはMVCに含まれていないすべての「クラス」(DOMアクセス、エフェクト、デバッグコードなど)を対象としています。
このライブラリ/コードをさらに整理するには、どのOOスタイルを使用する必要がありますか?
コントローラの「クラス」の例:
/**
** Controller
*/
Co.Controller = function (o_p) {
var o_p_string_send;
Su.time();
o_p = Mo[o_p.model].pre(o_p);
if (o_p.result !== 'complete') {
o_p_string_send = JSON.stringify(o_p);
Su.time();
//Su.log(o_p_string_send);
Co.serverCall('pipe=' + o_p_string_send, function (o_p_string_receive) {
Su.time();
//Su.log(o_p_string_receive);
o_p.server = JSON.parse(o_p_string_receive);
Mo[o_p.model].post(o_p);
Su.time(true);
Su.log('Server time: [' + o_p.server.time + ']');
});
}
};