誤った設計のクラス Criteria

Date 2006-06-02 09:39:19 | Category: XOOPS

in englishin japanese
XOOPSには基本設計から間違っていると思われるクラスが数多く存在しますが、その最たるものがCriteriaです。

ここで言うCriteriaとは、XoopsObjectを呼び出すときに使われる「条件式クラス」のことで、こんな感じで利用します。

$member_handler =& xoops_gethandler('member');
$getuser = $member_handler->getUsers(new Criteria('email', $myts->addSlashes($email)));

この場合、メンバーハンドラのメソッドを利用して、プロパティemailの値が、$emailであるユーザオブジェクトの配列が渡されます。(ここでのemailはUNIQUEなので、得られる配列の要素数は0か1です)

SQLをご存じの方ならお判りだと思いますが、このCriteriaは最終的に、以下のようなSQLを構成することになります。

WHERE email='$email4sql'


最も基本的なCriteriaの使い方はこのようなものです。

$criteria =& new Criteria( 'プロパティ名' , '値' , '演算子' ) ;

この演算子次第で、構成されるWHERE節の中身が変わりますが、演算子で最も多いのは、やはり=でしょうか。そのため、演算子のデフォルト値も'='となっています。

さてこのCriteriaで何が一番悪いかというと、型指定がどこにもないことです。型指定がないなら、「値」は常に文字列型である、というルールでもあるならまだ良かったのですが、さらに悪いことに、与えられた「値」を見て、その処理を決めてしまうのです。これは致命的とさえ言えます。

今はまだ、ここについて詳しく書くわけにはいかないのでやめておきますが、XOOPS全体に、このような必然性のない抽象化が数多く見られます。無意味な抽象化は、見通しを悪くするだけでなく、脆弱性にも直結すると理解するべきです。




You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=120