|
|
SledgeによるWebアプリケーションフレームワーク入門 |
第5回:データベース
著者:ライブドア 谷口 公一 2005/7/13
|
|
|
前のページ 1 2 3 4
|
|
データの保存について
|
次に、実際にアプリケーションからデータを保存させるためのテーブルを用意しておきましょう。
|
mysql> DESCRIBE address_book; |
+ | ----------- | + | ------------------ | + | ------ | + | ----- | + | --------- | + | ---------------- | + |
| | Field | | | Type | | | Null | | | Key | | | Default | | | Extra | | |
+ | ----------- | + | ------------------ | + | ------ | + | ----- | + | --------- | + | ---------------- | + |
| | id | | | int(10) unsigned | | | | | | PRI | | | NULL | | | auto_increment | | |
| | name | | | varchar(255) | | | YES | | | | | | NULL | | | | | |
| | email | | | varchar(255) | | | YES | | | | | | NULL | | | | | |
| | timestamp | | | timestamp(14) | | | YES | | | | | | NULL | | | | | |
+ | ----------- | + | ------------------ | + | ------ | + | ----- | + | --------- | + | ---------------- | + |
4 rows in set (0.00 sec) |
|
このテーブルに対応するクラスをThinkIT/Data/AddressBook.pmに書きます。
|
package ThinkIT::Data::AddressBook;
use strict;
use base qw(ThinkIT::Data::Base);
__PACKAGE__->table('address_book');
__PACKAGE__->columns(Primary => 'id');
__PACKAGE__->columns(All => qw(id name email timestamp));
__PACKAGE__->columns(Essential => qw(id name email));
1;
__END__
|
たったこれだけで、address_bookテーブルを抽象化するクラスが完成しました。あとは簡単です。第2回のサンプルコードのどこかに下記の一行を追加します。
|
use ThinkIT::Data::AddressBook;
|
そして、post_dispatch_confirm()を下記のように変更すれば、入力情報をデータベースに保存することが可能です。
|
sub post_dispatch_confirm {
my $self = shift;
my $input = $self->session->param('user_input');
return $self->redirect('./input') unless $input;
# $input の情報を保存
ThinkIT::Data::AddressBook->create($input);
$self->redirect('./finish');
}
|
このように、保存する箇所ではたった一行追加することによって、Webの入力フォームから送信されたnameおよびemailの値がレコードに追加されます。
値の精査(validation)を済ませた上でその値をセッションに保存し、データベースに保存する際にはそのままセッションから取り出した値を保存するということができるため、テーブルの定義に沿った正しく安全な値のみを入れることが可能となります。
このようにして、Sledgeでは自由に好みのO/Rマッパーを選択し、容易にデータベースを利用したアプリケーションを開発することが可能になっています。ただこれは、Webアプリケーションフレームワークの功績と言うより、O/Rマッパーの功績と言わざるを得ません。
Sledgeにはこれらが内包されていないが故に「柔軟」だと考えれば、従来通りDBIを直接使用してSQLによって値を保存することも可能です。だたし先述の「スキーマ変更時のリスク」を考えると、このようなO/Rマッパーを利用するという昨今のトレンドに乗ることをお薦めいたします。
なお、今回例として取り上げたClass::DBIの使用方法等の詳細はClass::DBIのperldocをご覧ください。
|
前のページ 1 2 3 4
|
|
|
|
著者プロフィール
株式会社ライブドア 谷口 公一
テクニカルディレクター。専門知識が全く無い中、オープンソースソフトウェアやコミュニティからシステム開発の知識やノウハウを習得し、オープンソースコミュニティにおいて活発に活動を行っている同社に憧れて入社。現在はポータルサイト「livedoor」におけるサービス開発を行う一方、本業の傍ら、お世話になっているオープンソースコミュニティへのコントリビューションも行なっている。
|
|
|
|