Data::Modelでのリレーション(2) add_methodでリレーションを実装

| コメント(0) | トラックバック(1)

Data::Modelでのリレーション(1)で、Data::Modelに大きくて重い皮を被せたので自縄自縛に陥ってしまったと書きました。一方でArkサンプルアプリケーション「SimpleLinks」では、規模がFF14総合ウェブアプリケーション「Amikeco」とは段違いに小さいこともあって、比較的見通しがよいスキーマが書けたように思います。Data::Modelサンプルアプリケーションとしてもご覧いただけるかも知れません。

例えばmany_to_manyを例に取ると、websiteが所属するcategoryの一覧は$website_row->categoriesで得られますし、その反対も$category_row->websitesで得られます。使う場合にのみリレーションを取り扱うので、不必要に遅くなることもありません。

ただ、つまるところは手動でやっている作業をスキーマに押し込めただけなので、きちんとしたリレーションになっているわけではありません。実際には$model->set(website => { ... });などと生で触ることをせず、mix-inしたクラスか、より好ましくは呼び出し元であるAPIクラス(SimpleLinks::Service::Links)でadd_websiteという皮を用意して、リンクエンティティ(website_categoryなど)を同時にupdateするということになりそうです。

やろうと思えば何とかhas_a, has_one, might_have, has_many, many_to_manyなどのリレーションを使えるので、リレーションが現段階でサポートされていないからといってData::Modelを使わないという食わず嫌いは勿体ないと思います。

なお、add_method関数がcallerを使ってメソッドを生やす先の行オブジェクトを探しているので、モデルがadd_methodの一大巨編になりがちなのが少し気に掛かります。最近とみにそのカオス具合が増している画面遷移図もどき(カオスっぷりを笑うために、第3弾を近々上げておきます)ほどの規模になると、流石に1スキーマクラスで何でもやろうとすると見通しが悪くなりかねないと思うのです。

......というようなことをサンプルアプリシリーズとは別個にエントリを立てて述べるのは、ひとえにシリーズの中に占めるModelネタが大きくなり過ぎて右往左往していることに他なりません。以上、見通しの甘さに定評のあるgardejoの提供でお送りしました。

トラックバック(1)

ArkとData::Modelのサンプルアプリケーションとしてぼちぼち作っている... 続きを読む

コメントする

筆者"Gardejo"について

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

このサイトについて

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

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

関連サイト

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

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

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

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

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

このブログ記事について

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

ひとつ前のブログ記事は「XREA/CORESERVERへのArkのインストール(1) まずは成功報告」です。

次のブログ記事は「XREAからcoreserverに引っ越しました」です。

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

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  

やや真面目なサイト