TIM Labs

シングルテーブルインヘリタンスを、サポートしていないORMでも使う

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

どのORMを採用するかでアプリケーションの作成方法は大きくかわってきます。 SQLをがりがり書くタイプのORMを採用したり、そもそもORMを使っていない場合、レイジーロードやシングルテーブルインヘリタンスなどの仕組みは自前で用意しなければなりません。

ここではEnumを使ってシングルテーブルインヘリタンスをサポートしていないORMでもシングルテーブルインヘリタンスを実現する方法を紹介します。 (S2JDBCのドキュメントにあるEnumを使って多態を表す例を参考にしました)

EntityからEnumに処理を委譲する

要は、Entityが行う処理をすべてEnumに委譲してやればよいのです。

できた!

。。。と思ったんですが、どこにもインヘリタンス(継承)が見つかりません。Enumは継承が使えません。 この問題はEnumに処理を書くのではなくEnumから振る舞いを取得する事で解決できます。

Enumから振る舞いを取得する

ではEnumから振る舞いを取得するように変更してみましょう。

Perlで書いたオブジェクト指向のプログラムみたいですが、PlayerBehaviorによるシングルテーブルインヘリタンスが実装できました!

S2JDBCやiBatisなどSQLをがりがり書くタイプのORM使っている、もしくはDBIしか使ってないから。。と嘆いている人、これで実装できます。 RubyとかPythonとか使っている人はちゃんとリッチなフレームワークを採用しましょう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/96

コメントする

このブログ記事について

このページは、troterが2010年12月13日 14:57に書いたブログ記事です。

ひとつ前のブログ記事は「gitで1つのコミットを複数のコミットに分割する」です。

次のブログ記事は「ctagsを使ってVimでCode Readingを加速する」です。

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