Sunday, March 6, 2011

mixer2での繰り返しデータの埋め込み

先月のことですが、こんなツイートを見かけました。

mixer2おもしろそう。 http://goo.gl/W1pRO スクリプトや式といった処理と、テンプレートをキレイに分けられそう。繰り返しデータの埋め込みもサポートされているなら、Wicketのテンプレートだけ取り出したような、自分的には理想のテンプレートエンジンになりそう。
とある方のつぶやきより)

mixer2に好感を持っていただけているようでうれしいです。

嬉しいよというついでに、「繰り返しデータの埋め込みもサポートされているなら」という点について、mixer2開発者としての説明をしてみたいと思います。

ツイート主さんの懸念、というよりは素朴な疑問と言うべきそれは、とても当然です。 Hello Worldには本当にHelloWorldを表示することしか書いてませんから。 どんなプログラマーでも、Javaでの開発でよく使われるJSPやVelocityのような従来のテンプレートエンジンとの比較を無意識に考えてしまうので、「じゃあ、ループしながら値を埋め込むようなときはどうすんだろ?」とふと思うのは当然です。

結論を言うと、
Q.たとえばDB検索の結果とかで複数の値があるとき、それを繰り返し処理しながら表示するのって、mixer2ではどうやんの?
A.普通にJavaでforやwhileなどを使ってください。
なのです。

具体的なサンプルソースは本家サイトのTIPSのページの下のほうに書いておきました。

さて、上のリンク先、見ていただけましたでしょうか?そう、コードが長いですww。 JSPだったら<c:foreach>のようなカスタムタグを含めた3,4行ですみそうなところが、 mixer2だと10行くらいになっちゃってます(コメント行いれると15,6行!)

もちろん、これがベストプラクティスだということではありません。 こうした繰り返し処理を簡略化する汎用ユーティリティのようなものをmixer2のほうで用意するべきなのかもしれません。

ともあれ、ひとまずはmixer2を使う側のコーディングでどうにでもなりますよ、ということはなんとなくわかっていただけると思います。なにしろ、VelocityのVTL言語でもなくJSPのカスタムタグでもなく、ただのJavaコーディングなのですから。

1 comment:

  1. 丁寧な説明ありがとうございます、リファレンスをあまり読み込めていないことがばれてしまいました!
    コードが長いのは特になんとも思わないです、Javaの場合はIDEがほとんど書いてくれますもんね。それよりはテンプレートからスクリプトや埋込みの式を分離できる方にメリットを感じます。ただ、逆に処理側に表示関連を意識した処理が多くなるのはそれはそれで悩みどころですが。
    ところでnabedgeさんはWicketというフレームワークをご存知ですか?テンプレートから処理や埋込式が排除されていたり、リスト構造のバインドもかなりキレイに出来ていて面白いフレームワークです。よければそのフレームワークのリスト系のトコとかコンポーネント化の特徴を見てもらえると何かインスピレーションがあってmixer2にも何か良い影響があればな、と思いました。
    Wicketからテンプレート処理のトコだけ抜き出せると良いのですが、かなり重量級なフレームワークで分離が難しくて、そんな中mixer2にかなり興味をもったという次第です。これからもmixer2の進化にも期待しております、がんばってください!

    ReplyDelete