ちなみに

火曜日の空は僕を押しつぶした。

オレオレO/Rマッパーを作った話

概要

PerlDBI よく分からなくて、つらい気持ちになったので、勉強のために最低限の機能だけあるシンプルなO/Rマッパーを作ってみた。というかそもそも RDBMS 弱すぎるし SQL 全然分からない。厳しい。

まずはサービスとモデルを定義する。

package Service::User;

use parent, "Mos::User";

package Model::User;

use parent, "Mos::Model";
use Mos::Model;

column("id", "int");
column("name", "string");
column("age", "int");
timestamp;

そうするとこんな感じで使える。

Service::User->create({name => "sixeight", age => 28});
Service::User->create({name => "tomohi_ro", age => 29});

my $users = Service::User->all({order_by => "id DESC"});
for my $user (@$users) {
  say "id:         " . $user->id;
  say "name:       " . $user->name;
  say "age:        " . $user->age;
  say "created_at: " . $user->created_at;
}

my $user = $users->[0];
$user->age(30);
Service::User->update($user);

my $adult =  Service::User->find({age => 30});
say $adult->name;
say $adult->updated_at;

不満

モデルの定義に user parentuser Mos::Model が必要。継承していることを明示しつつ import を呼びたかった。お作法が分からない。

column で型を渡すのが文字列なのがださい。

find で柔軟な検索ができない。29才以上とかそういうの。

エラー処理が適当。

トランザクションに対応してないので、Service::User->dbh->begin_work とか書く必要がある。

なぜ作るのか

頭が悪いのでいろんな機能がついている既存のすごいやつが使いこなせないし、読んでも理解するのに時間がかかる。 自分で作ったら仕組みが分かるし、自分の好きなように出来るので必要な機能だけ入れてシンプルに保てる。好きに出来るのはいい。全能感。

欠点

車輪の再発明。メンテナンス出来ない。

名前の由来

モスカフェで書いたから。

感想

Ruby に比べて Perl は黒魔術しにくい。Ruby なら一瞬で書けそうなのを妥協せざるを得なかったりする。 でも、なんか手作り感があって楽しい気がする。こんなに楽しいなら、大学生くらいのころにもっとちゃんとやっておけば良かったと思う。

いまは覚えなくてはいけない言語が沢山あってしかも生活がかかっているのクリティカル。Perl で消耗している場合ではないのだけれど、Perl やってこなかった分のしっぺ返しが来ている。

まとめ

この文章は酔っ払って書いており、何を書いたかよく分かっていない。

明日反省するやつ。

続・初めてのPerl 改訂第2版

続・初めてのPerl 改訂第2版