中規模向けJS設計

自己紹介

自己紹介

自己紹介

自己紹介

日記

日記

注意

注意

模索中のものも多いので、鋭い突っ込みが入るとスルーしたりします。

設計っている?

設計っている?

設計っている?

設計っている?

設計っている?

小規模向け設計(あまり分業してないようなの)

jQuery使う

jQuery使う

jQueryはフレームワークに近いのでそれだけである程度の規模までは対応可能。
うまく使えばそれだけで十分。

中規模向け設計(サーバ、JS、cssで分業してるようなの)

何が必要?

何が必要?

何が必要?

何が必要?

何が必要?

何が必要?

何が必要?

URL dispatcher

そこそこ規模が大きくても何とかなるjavascriptの設計(URL dispatcherの薦め)
function dispatcher (path, func) {
    dispatcher.path_func = dispatcher.path_func || []
    if (func) return dispatcher.path_func.push([path, func]);
    for(var i = 0, l = dispatcher.path_func.length; i < l; ++i) {
        var func = dispatcher.path_func[i];
        var match = path.match(func[0]);
        match && func[1](match);
    };
};
dispatcher(location.pathname);

URL dispatcher

そこそこ規模が大きくても何とかなるjavascriptの設計(URL dispatcherの薦め)
dispatcher('.', function () {
    $(function () {
        // 全URLで使う内容 
    });
});
dispatcher('^/hoge', function () {
    $(function () {
        // /hogeで使う内容 
    });
});
dispatcher('^/hoge|^/huga', function () {
    $(function () {
        // /hogeと、/hugaで使う内容 
    });
});

何が必要?

form validater

サーバサイドでvalidate用APIを用意して、formの内容を投げるのがいいかも。
(サーバサイドでも入力時に同じAPIを使う)
通信があるので遅くなるのが欠点。
validation ruleを正規表現とかでサーバサイドと共有するのは難しい。
(複数要素と関連するようなruleを表現するのが大変)

何が必要?

require

URL dispatcherあればそこまで重要じゃないかも。
index.jsとlib.jsくらいで分かれてればいいので。
jsとかcssのURL渡すと圧縮して一つにしてくれるGoogleのサービスとかあるよ。
(使ったこと無いけど)
Reducisaurus Shrinks CSS and JS

何が必要?

event handler

機能毎にevent namespaceで名前つける。
functionも名前つける。
$('a').bind('click.hoge', function huga () {});
(firequery使ったときにどのイベントハンドラか判別できる)
$().live()はくせがあるけど、うまく使うと待ちを減らせるのでおすすめ。
DOM Ready前にイベントを設定する方法(jQuery.liveの紹介)

何が必要?

CSS coding rule

.link:{cursor:pointer;} .hide:{display:none;} .error:{color:red;}
的なものは常に定義しといてもらえると楽。
もう少し大きな単位で共通化したい(Lightbox的なものとか)
form tagはセレクタに使用しない。
出来るだけ階層化する(フラットにしない)。
JSで使用する用の名前空間を作る(js*とかfn*とか)

その他

jQuery使うなら中規模まではクラス的構造そんなにいらない。
階層構造に関してはURLとPluginとカスタムイベントとかで結構表現できる。
テスト考えるならクラス的な方がいい。
クラス的にするかどうかはテストしたいかどうかで判断してもいいかも。
大規模なやつはDojoとかClosure Library使うと良いと思う。

以上 ご静聴ありがとうございました