javascript で factory メソッドを使わない理由

| | コメント(0) | トラックバック(0)



factory メソッドが好きで、よく使う。


なんで好きかって言うと、if 文を減らせるからだ。


if 文をいかに減らすかで、コードの可読性はだいぶ違ってくると信じてる。


phpでもよく使ってた。



けど、今まで javascript で factory メソッドにお目にかかったことが無い。


フレームワーク的なもののソースをいろいろ見てきたけど


(流し読みとか、エディタで開いたことがあるもカウント)


(いや、ほんとのこというと、そんなにいろいろ見てません。嘘つきました。)、


factory メソッドを使ってるものを寡聞にして知らない。


「寡聞にして知らない」って言葉を使ってみたかった。


ちょっと前まで、「寡聞にして」を全く逆の意味と寡聞にして思ってた。だから、なんて鼻にかかる言葉だと思って使う機会がなかったのだ。



まあ、なんせなんでかなーと思って、試しに使ってみた。


正確に言うと、なんでかなー、便利なのになーとか、


実はみんな知らないんじゃねえのとか、


あれ、俺間違ってんのかなとか、


なんか俺やっぱついていけてない?とか、いろいろ思って使ってみた。



いや、違うわ。


何も考えずに普通に使ってみた後で


いろいろ思うことがあった。



ただ、その時本当に何も考えてなかったかというと(略



例えば javascript で気になる if 文といえば、


やっぱり クロスブラウザ対策だよね。ってことで、


こんな感じでやってみた。



hoge = {}

hoge.factory = function() {
var ua = navigator.userAgent.toLowerCase(),
isOpera = (ua.indexOf('opera') > -1),
isSafari = (ua.indexOf('safari') > -1),
isGecko = (!isOpera && !isSafari && ua.indexOf('gecko') > -1),
isIE = (!isOpera && ua.indexOf('msie') > -1);

if (isIE) {
return new hoge.IE();
} else if (isSafari) {
return new hoge.Safari();
} else {
return new hoge.Gecko();
}
}


で、思ったのは、


これってハードコーディングだよね。ってことです。



ブラウザごとにクラス作ってるけど、


例えば IE6.0 と IE7.0 でも挙動はぜんぜん違うわけで。


バージョンごとにクラス作ってくつもりかよ、っていう。



javascript におけるクロスブラウザ対策では


「関係する機能が使えるか」で処理を分岐させることが多いぽいですね。


attachEvent が使えるか、とか、addEventListener が使えるか、みたいな。



ただし、ブラウザによって判別する他ないような場合もあるわけで。


そういう時には factory メソッドも悪くないんじゃないかと思った。


例えば、ブラウザの「戻る」対策とか。



というわけで、クロスブラウザ対策に factory メソッドが使えるかも。


と思ったけど、実際は微妙だったって結論なわけですが、


factory メソッドの用途はクラスブラウザ対策以外にも全然あるので、表題は間違い。


トラックバック(0)

このブログ記事を参照しているブログ一覧: javascript で factory メソッドを使わない理由

このブログ記事に対するトラックバックURL: http://pm.11op.net/mt/mt-tb.cgi/11

コメントする