CGIとミックスイン

たとえば,こんなCGIのパラメタがあったとしよう(山田さん20歳をデータベースに登録する)

 cmd=add&name=yamada&age=20

こうやってみると,明らかに name と age はひとまとまりのデータである.cmdとは別物であると考えるべきだろう

ところで,このデータをしまうデータベースのフィールドはこんなものだとしよう

id serial
name varchar
age int
company foreign key company

やっぱり,name と age が含まれてはいるが,他にもidやらcompanyやら,上のCGIでは指定されていないデータもある.

で,こういうデータ(nameとage)を「ひとまとめにしたいなー」と思っても,何しろCGIの入力というのは単なるキーと値のペアなので,まとまってるも何もあったもんじゃない.

そこで目にとまったのが「ミックスイン」という機能.簡単にいうとあるクラスに他のテンプレートで指定した変数を追加する機能.

http://www.kmonos.net/alang/d/template-mixin.html

特筆すべきは「追加のされかたが一枚岩」であるところだ.普通に

 class Foo {
   Bar b;
   int x;
 }
 class Bar {
   String s1,s2;
 }

というようなクラスでは, Fooからs1,s2にアクセスするには一旦 b をはさまないといけない.しかし,

 class Foo {
   mixin Bar;
   int x;
 }
 class Bar {
   String s1,s2;
 }

とすれば,なんとFooクラスからs1,s2が直接参照可能になる.

これをまともにサポートしてるのは上で述べたD言語くらいだが,これがあれば,上のCGIのパラメタも,データベースのフィールドも 「 name, age 」というテンプレートにミックスさせてしまえばよい.