|
||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||
| Sledge+O/Rマッパーでデータベースを利用したWebアプリケーション開発 | ||||||||||||||
|
ここまではデータベース周りの最近の動向について触れましたが、Webアプリケーションフレームワーク「Sledge」を利用する際のデータベース操作について、筆者の所属するライブドアで一般的に行なわれている実装方法に沿って見てみましょう。 |
||||||||||||||
| O/Rマッパーは標準登載されていない…が | ||||||||||||||
|
先に「オープンソースのWebアプリケーションフレームワークの多くは、O/Rマッパーが内包されていないケースが多い」と述べましたが、Sledgeにおいても同様にO/Rマッパーはおろか、データベース操作に関してのインターフェースが一切提供されていません。 しかし、第2回の「セッション管理」の回で「セッションとして保存したい情報をシリアライズして、MySQLのDBに保存するようなしくみを標準的に備えています」と述べました。つまりセッション周りにおいては、データベースへの接続や読み書きが独自に行なわれており、Sledge::Session::DBIというクラスの中でDBIを用いてデータベース操作し、sessionsというテーブルを読み書きするようなしくみが標準的に実装されています。 |
||||||||||||||
| Sledgeでの実装 | ||||||||||||||
|
少々遡りますが、第2回の「セッション管理」の回で、Sledgeにおけるセッションの実装例としてnameとemailというパラメータをデータベースに保存する場合のサンプルコードを挙げました。 よくご覧頂くとわかりますが、post_dispatch_confirm()の中で「$inputの情報を保存」と書かれたコメント行でお茶をにごし、肝心の$inputの情報を保存する手順があえて書かれていません。そこで今回は、この値を実際に保存する方法を取り上げてみたいと思います。 ライブドアが提供するシステムで主に利用されているO/RマッパーはClass::DBIで、Javaで言うところのHibernateに近い存在なのではないでしょうか。Class::DBIを継承したテーブルごとのクラスをアプリケーション内から呼び出して使用するパターンがほとんどです。 Sledgeにおいて一番最初にプロジェクトのクラス群を作る際、sledge-setupコマンドを利用しますが、デフォルトでセッションがデータベースによって保存、管理されている以上、このデータベースの情報を保存する設定情報が初期段階に自動的に含まれています。 |
||||||||||||||
% sledge-setup ThinkIT
|
||||||||||||||
|
この時生成されたThinkIT/Config/_common.pm(注)の中の%Cというハッシュに、DATASOURCEというキーを持つ値があり、そこにデータベースへの接続情報が含まれています。この値を適宜書き換えて、セッションを保持するデータベースの情報を設定します。 |
||||||||||||||
$C{DATASOURCE} = [ 'dbi:mysql:thinkit;host=dbhost', 'user', 'password' ];
|
||||||||||||||
|
※注:
なお、「SLEDGE_CONFIG_NAME」という環境変数を設定しておくことにより、「"ThinkIT::Config::" . $ENV{SLEDGE_CONFIG_NAME}」という名前のモジュールが後から読み込まれ、その値で上書きされます。開発環境とプロダクション環境とでデータソースが異る場合は、このSLEDGE_CONFIG_NAME環境変数を分けて設定することができますので、環境変数をアプリケーションが読み込まれる前の段階で設定しておけば、環境によってデータソースを変えて、同じコードで稼動させることが可能になります。
このセッションを保持するデータベースの情報を、そのままコンテンツで利用するデータベースの情報としても使用したい場合、ThinkIT/Data/Base.pmというClass::DBIを継承したクラスを作り、そこでこのデータソース情報をセットします。 |
||||||||||||||
package ThinkIT::Data::Base;
|
||||||||||||||
|
このような、データベースの情報を保持したClass::DBIの子クラスを1つ作っておき、それを更に継承して各テーブルに該当するクラスを作ります。なお、これは各テーブルのクラスの親クラスとなりますので、各テーブルで汎用的に利用できるメソッドをこのクラス内にあらかじめ書いておくという使い方もできます。 |
||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||

