PORT4 > Pasta
 

Pasta

脱Java Beans

Java Beansを捨てましょう。 Java Beansに依存しないプログラムを書くと、こんなによいことがあります。

  • コンパイル時にエラーが検出されやすくなり、実行時に見つかるバグが減る。
  • リファクタリングが容易になるので、汚いコードが放置されにくくなる。
  • リフレクションによるパフォーマンスの低下が避けられる。
  • 難読化ツールが使いやすくなる。

脱JSP/MVCモデル

JSPとMVCモデルを捨てましょう。 JSP/MVCにはこんな欠陥がありました。

  • 複雑怪奇なフォームビーンというものがあるが、顧客の要求の方がもっと複雑怪奇なので、すぐ破綻する。
  • HTMLともXMLともJavaともつかない奇怪なプログラムを目にすることになる。
  • 大量のデータをJavaBeansに溜め込もうとして画面の表示が止まったり、OutOfMemoryErrorが出る。
  • アプリケーションサーバーによって動作がまちまちだったり、パフォーマンスに著しい差が出ることがある。

で、対案は?

JavaBeansの代わりに、普通のJavaオブジェクトを使います。 「Javaオブジェクト」と「リクエストパラメーター」を自動的にバインディングするようなことはしません、ひたすらJavaでプログラムを書いてください。 心配ありません、「Javaオブジェクト」と「フォーム」を結びつける一見便利そうなツールを使って顧客の複雑怪奇な要求に答えるよりは簡単なはずです...。 その代わり、Pastaは「CLS」という言語を使って、「リクエストパラメーター」と「フォーム」を結びつけることができます。 こんな風に:

  <form method="post" cls-logic="$parameters; |restore;">
    <div>お名前:<input type="text" name="name" value=""></div>
    <div>
      職業:
      <select name="job">
        <option value="1">会社員</option>
        <option value="2">自由業</option>
        <option value="3">自営業</option>
        <option value="4">主婦</option>
        <option value="5">その他</option>
      </select>
    </div>
  </form>  

上のHTMLの cls-logic="$parameters; |restore;" の部分に着目してください。 $parametersは、リクエストパラメータを取って来いという意味です。 |restoreは、このタグの中身を、与えられたリクエストパラメーターを送るように書き換えてしまえ、という意味です。 Pastaは賢いので、「このパラメーターを送るには、フォームがこんな状態だったらいいだろうな...」ということを思い描いてくれます。

CLSは画面をデザインするために使われているCSS(Cascading Style Sheet)によく似た言語です。 詳細な説明はここでは省略しますが、不気味なほどロジックとデザインを完全に分離することができます。 さらにCSSを合わせて利用することで、ロジック・文書構造・デザインを完全に分離できます。

解析済みのXHTML/HTMLに適用するという点でXSLTに似ていますが、CLSは既存のページに「何かを加える」あるいは「余計な物を取り除く」という発想なので、さらに「テンプレート的です」 例えば:

  <b cls-logic="[if: ${switch} == 'off'; |hide-tags;]">ON</b>  
  <b cls-logic="[if: ${switch} == 'on'; |hide-tags;]">OFF</b>
  <textarea cls-logic="[if: ${switch} == 'off'; |attribute: disabled;]">
  </textarea>

上の例ではswitchの値が'off'であればONの周りのbタグが除去され、 textareaにdisabledという属性が加えられます

PastaはMVCにおける「モデル」の代わりに「パイプ」を使います。 パイプの出口にはCLSによるテンプレートが接続され、プログラマが書いたプログラムがパイプの入り口にデータを供給します。 パイプから取り出されたデータは、画面表示使われた後にすぐに破棄されるので、メモリを必要以上に消費しなくてすみます。 また、データの供給とテンプレートの処理は並行して行われるので、画面の表示開始まで、ぐるぐる回る「e」マークや「N」マークを眺めている必要はありません。

画面のフローの制御はどうやるの?と聞かれれば、Pastaは特にこれといって秩序だったものを用意していません。 強いて言えば、はるか昔にチューリングさんが考えた「有限状態機械」のモデルがよいでしょう。 大学で計算機科学を勉強していなくとも、PerlやCでCGIを書くプログラマは、無意識にこのモデルに従っているはすです...。

ただし、Pastaはそれを支援するための、便利なツールを用意しています。例えば...

  1. エラーメッセージの表示
  2. ページング(次のページ、前のページ..といった処理)
  3. multipart/form-dataの処理(ファイルアップロード)

などなど。

Pastaの目的は?

デザインとロジックを完全に分離してサイトのメンテナンスを容易にすること、 巨大なページを安定して出力できるテンプレート言語を作ること、 JavaBeansを排除して、プロプリエタリな商用ソフトとしてのパッケージングを容易にすることです。

使えますか?

使えます。ダウンロードして実行してみてください。 また、実際に使っている現場を見ることもできます。

Credits

This product contains software developed by Apache Software Foundation (http://www.apache.org/).

This product includes software developed by Andy Clark.