Data::Modelでのリレーション(3) 何でもmixinしない方が良かった

| コメント(0)

ArkData::Modelのサンプルアプリケーションとしてぼちぼち作っているSimpleLinksについて、Data::Modelでのリレーション(2) add_methodでリレーションを実装以後、一通りのテストと実装を行いました。まだ重複した処理が残っていたりして汚いのですが、改めて思うのは、手動で泥臭く実装するのは大変だということです。そもそも論を書いてしまえば、RDB的な物の考え方から抜け出せない私が自縄自縛に陥っているような気もしますが。

ともあれ、じゃああとはArkのModelと結婚させておしまいだね、と思って寝床で『モダンPerl入門』を読み返していると、p.102辺りで眠気が覚めました。

(前略)拡張機能を使いすぎるとそのORMの実装に詳しくない他の開発者達が全く手出しできないものになってしまいますし、(中略)業務上の効率を考えると何とか工夫を加えるにしてもその上のレイヤーで行うことをお勧めします。

なんだかData::Model::Mixinの使い方を間違えているような気が常々していたのですが、図星でした。

そもそもいやらしいのが、add_methodで行オブジェクトにメソッドを生やしつつも、その実装は(スキーマクラスの肥大化を防ぐために)個別のSimpleLinks::Schema::Mixin::*に丸投げしているという私の書き方です。

Data::Model::Mixin::FindOrCreateのような汎用的な機能や、Data::Model::Mixin::Queue::Q4Mのような(抽象でなく具象という意味で)低レベルな処理を扱うのには、なるほどmixinは便利でしょう。ですが、今回のようにadd_methodの実装をスキーマクラス(便宜的に表クラスとでも書きましょう)のクラスメソッドとして作成して、それをmixinしなければならないかというと、これは全然違いました。

そもそも現状でも使っているトランザクション(Data::Model::Transaction)を真っ当に使えば、別に外部で実装して問題になるわけではありません。

手動で泥臭くリレーションを実装するためには、行オブジェクト生成・更新・削除などにフックするのが簡単かつAPIも自然なので、行オブジェクトにメソッドを生やすこと自体は現状のままとしようと思います。つまり、スキーマクラスの一つ上のレイヤーであるサービス(API)クラスで実装すると、わざわざ$service->update_website($website)というような冗長な書き方になってしまいます(と思っています)ので、実装の投げ先だけSimpleLinks::Schema::Mixin以外のクラスに変えることによって、自然体で今のままの$website->updateにしたいという意図です。

ということで、少々実装を変えてからサンプルアプリケーションの解説を続けたいと思います。

コメントする

筆者"Gardejo"について

  • Twitter: @gardejo
  • GitHub: gardejo
  • CodeRepos: gardejo
  • CPAN: MORIYA

このサイトについて

Eorzea System Worksは、架空のシステム開発結社です。

FF14.name (FinalFantasyXIV.name)では、アヴァター(プレイヤーキャラクター)の管理システムやイベント出欠・リマインダシステムや、リンクシェル(LS)運営・管理システムやDKPシステムなどを設計・開発・公開する予定です。

関連サイト

関連サイトでは、他にもFF14に関連するサイトをいくつか紹介しています。

リンク, トラックバック歓迎

このブログへのリンク(どのページでも構いません)やトラックバックを歓迎します。

設計・開発・運用の参考にさせていただきますので、コメントもお気軽にお寄せください!

個別の記事に対するご意見などのほか、目安箱もご用意しています。

このブログ記事について

このページは、Gardejoが2009年8月18日 23:35に書いたブログ記事です。

ひとつ前のブログ記事は「FF14向けウェブサービス"Amikeco"の紹介文」です。

次のブログ記事は「ER図の描画ツールを求めて三千里」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2014年2月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

やや真面目なサイト