Liftのアーキテクチャ
では、Liftがどんなアーキテクチャのフレームワークなのか、簡単に説明します。以下に概要図を示します。
LiftはSnippetアプローチを採用した、"View First"というコンセプトのアーキテクチャを採用しています。
開発者が作成するのは、以下の4つの要素です。
1. アプリケーション設定 Boot.Scala
データベースへの接続設定やURLに対してマッピングを定義する設定を行います。設定は全てScalaのプログラムで行います。
Liftでは、ほぼ全ての設定をこのBoot.Scalaで行いますので、大量のXMLファイルを管理する必要はありません。
2. テンプレート(XHTML)
ブラウザに表示するためのHTMLのテンプレートです。テンプレートはXHTMLで作成します。テンプレート内に動的な出力を埋め込みたい場合は、出力を生成するSnippetをXHTML内にXMLタグとして埋め込みます。
ファイルはXHTMLファイルですので、そのままブラウザに表示することができます。
デザイナーが作成したHTMLファイルにプログラマがXMLタグを埋め込む、プログラマがラフなXMLとHTMLでプロトタイプを作り、デザイナーに修正してもらう、など、プログラマとデザイナーが協業しやすいようになっています。
3. Snippet
Liftでは、ブラウザからのHTTPリクエストに対してテンプレートを基に出力を生成します。テンプレートのレンダリングの過程で、テンプレート内のXMLタグに対応するSnippetをLiftが呼び出すことで、動的な出力を生成する形になります。
Snippetは、後述するModelを利用した動的な出力の生成などを行います。また、Snippetで出力を生成する際に、特定のHTML上のコンポーネントに対してのイベントハンドラを、独自に用意したFunctionオブジェクトに割り当てる(Function Mapping)ことが可能であり、さらに、Snippet自体が状態を保持することが可能になっているおかげで、Snippet=コンポーネントという形での開発が可能です。
4. Model
LiftでのModelは、データベースのテーブルと1対1で対応するように定義します。Modelのクラスひとつがデータベースの1テーブルに対応する形になります。
Modelを使ったデータ操作では、基本的にプログラマがSQLを発行する必要はありません(APIを利用することで直接SQLを発行することは可能です)。
Modelには基本的なCRUD操作(Create、Read、Update、Delete)に対応するAPIが用意されていますし、検索条件もModelのAPIを利用して動的にプログラミングすることができます。
もちろん、テーブル間の親子関係の定義も可能ですし、Modelを検索、登録、更新、削除を行う画面を簡単に作成することが可能です。