Data::Modelでのリレーション(1)

| コメント(0)

Data::Modelでは、現段階ではリレーションをサポートしていません。作者の大沢さん(id:yappo)ご自身の紹介には「よい実装手法があれば作りたい所」とも書かれているので、将来的な実装を期待するところ極めて大なのですが、現段階でサポートしていないのも納得のいく話です。

なぜなら、Data::Modelはobject/relation mapperではなく、data/object mapperだから......というのも勿論ですが、O/Rマッパーを使う上では、あまりリレーションにこだわらず、リレーションが必要になる処理は予め非同期に済ませておくのが、世の趨勢である(ように見受けられる)からです。『モダンPerl入門』にも、以下のような箴言が書かれています。

そのような複雑な処理が必要なのであれば、それらは非同期に前もって行い、サマリーテーブルを作成するべきでしょう

とはいえ、先の画面遷移図を見ると、Amikeco::Entity::Avatar(プレイヤーキャラクター)とAmikeco::Entity::Race(種族)のようなhas-a関係だけでなく、Amikeco::Entity::Account(アカウント)とAmikeco::Entity::Expansion(拡張パッケージ)やアカウントとプレイヤーキャラクターのようなhas-many関係が頻出しています。

まさにこれを単純化して、リレーションを廃したサマリーテーブルを触らなければならないのでしょうが、取り敢えず最初はリレーションを無理矢理実装しています。もうちょっと一般化が済んだら泥臭いコードを公開しますが、そもそもData::Model::Rowオブジェクトにadd_methodすればいいのに、わざわざ別個のMyApp::Entity::Foobarオブジェクトを作っているので、スタート地点から使い方を間違えているような気がなきにしもあらずです。というような状況で、Data::Modelのトランザクションと、MyApp::Entity::FoobarMoose/Mouseオブジェクト)のlazy_buildでせこせこと実装しています。

コメントする

筆者"Gardejo"について

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

このサイトについて

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

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

関連サイト

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

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

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

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

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

このブログ記事について

このページは、Gardejoが2009年7月 6日 22:53に書いたブログ記事です。

ひとつ前のブログ記事は「画面遷移図もどき(2)」です。

次のブログ記事は「ArkのData::Modelサポート(1) 認証情報保存先プラグインを作ってみた」です。

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

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  

やや真面目なサイト