2006-05-21 ウィスパー2―その2―
ドキュン生活中盤戦,ただいま作業しているのは「ウィスパー2」のII(DB層)です。先週は混沌とした状況でしたが,細かく分析してみたら「すべきこと」が明らかになってきました。
クラスライブラリ
まずクラスライブラリを整備することにしました。DBとDBを使うアプリケーションとのインターフェイスをどうしようか悩みましたが,アプリケーションからはオブジェクトを介してDBを使うことにしました。
オブジェクトを生成してメソッドをがちゃがちゃ呼び出すだけで,DB内のデータを追加・更新・削除できるようにするわけです。
方針は「便利に使えること」を優先するものとします。「アプリケーションからDBの存在を完全に隠蔽する」という考え方もありそうですけれど,DBを隠す必要など最初からないのと,懲りすぎると性能が出なくてハマる気がするので軽く使うことにします。
Perlでオブジェクト指向プログラミング
PerlでOOPです。「ジューシィ」のとき部分的に導入したのですが,ウィスパー2ではもっと積極的に導入することにしました。
Perlでは「@ISA」や「bless」といったキーワードを使って,継承やクラスとクラスのメンバの関連付けをします。
気になったことを少々。
- アクセサメソッドやプロパティのようなものを実装するには ― サブルーチンを定義して,サブルーチン内でblessしたデータ構造にアクセスします。変数の数だけサブルーチンが必要です。数が多くなると書くのが面倒になります。Class::ObjectTemplateモジュールを基底クラスにすると,いくらか簡単に実装できます
- Class::ObjectTemplateが自動作成するアクセサメソッド内で,値の妥当性を評価するには ― できません。できるのかもしれませんが,私はまだその方法を発見していません。というかできないと困るんですけど(なぞ)みなさん,どうやって解決しているのでしょうか
- メソッドをオーバーロードするには ― サブルーチンの引数の数と型を,自前で調べて実装します。同じ名前のサブルーチンを複数宣言することはできません。ウィスパー2では,メソッドをオーバーロードしないで実装しています
SQLのトリガ文
トリガ(TRIGGER)は,ある表のある列が追加・変更・削除される前,あるいはされた後,自動的に実行させるSQL文らしいです。表の整合性を保つために使うと便利そうです。
いままでトリガを使ったことがありませんでした。今回,初導入です。どうなることやら。