BMO人柱募集 | Top | プログラムしたい人の集い?

 

Java製フレームワーク夢想するぞ

忘れないうちに書いておこう。きっと…。

誰かが作ってくれるだろう…


DjangoのDRYっぷりは徹底しています。


どのくらい徹底しているかというと


class Entry(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()

class Comment(models.Model):
    body = models.TextField()
    entry = models.ForeignKey(Entry)


こんな感じのモデルがあるとして、EntryにいくつかのCommentが関連づいて保存されているとします。

>>> c.entry #cはCommentのインスタンス


これでcに関連づいているEntryのインスタンスがとれます。まぁ、当然ですね。


>>> e.comment_set #eはEntryのインスタンス

これでeに関連づいているCommentのインスタンス(のリスト)がとれます。

片方に向けて関連が定義されていれば、当然逆方向からも関連してるよね。二回書くのはDRYに反するよね。ってのが、Djangoの言い分です。


今回書いておきたかったのは、こんなことではありません。


ふと、JavaでDRYでらくちんなWebアプリケーションフレームワークを作ろうとしました。フツーにJavaでDjangoがしているようなことをしようとすると、コンパイルすらできません。

Entryクラスにcomment_setなんて名前はないので、Java的に当然ですね。


実行時にcomment_setという名前を追加するのは、javassistとかを使えばできるんですが。。。

とPython温泉でずっとJavaを書きながら悔しがっていました。


が、しかし!

Seasar Conference 2007 Autumnに行ってきたんですよ。古い話ですがw

Irenkaっていうプロジェクトがありました!コンパイル時ソリューションです!

Eclipseがコンパイルを行う際に動作するものだとのことでした。

そう!できるんですよ。Djangoと同じ仕組みが。


イメージはこんな感じ。

  1. CommentクラスにEntryクラスを格納する変数を定義し、その変数に関連を表すアノテーションを書く

  2. コンパイル時にアノテーションをチェックし、コンパイラが参照するEntryクラス(.class)にcomment_setのような変数を動的に追加する。
    ソースコード自体はいじらないところがみそ。

  3. コンテナ起動時に、アノテーションをチェックし、Entryクラス(.class)にcomment_setのような変数を動的に追加する。


これで、Entryというクラスがjarの中に入って提供されていてもノープロブレム!

Taged with:,,

Entry Date:2008-01-13 00:11

Author:makoto

ping url:http://www.everes.net/2008/jan/13/java-fantasy/tbping/

subscribe:feed with LDR

Add Comment

コメント追加








What's Next
Tags
Blog Archive
Project
  • » WorkStyle

    作り直し中なので、見ないでっ!

  • » pymagnolia

    ma.gnolia.comのAPIを操作するPythonライブラリ。

  • » django-ja

    Djangoと日本の仲間たち。
    Djangoに関するニュースや、「仲間たち」のブログエントリをアグリゲートしています。

  • » rhaco

    PHPのWebフレームワーク。 PHPらしさを失わず直感的に記述できることを目指している。 Djangoと同じく、他のライブラリに依存しない。また、Djangoっぽいテンプレートの作り方も可能。

  • » Tracka

    スモールチーム、家族用の知共有ウェブアプリケーション。
    テキスト、画像、youtube動画、stage6動画等をトラック!

  • » BMO

    BMOは、本、CD、DVD、ゲームに印刷されているバーコードをiSightで読み取り、AmazonのAPIを利用して画像や情報をmacに保存します。iSightのついているmacで利用してください。Leopardと呼ばれているOSX 10.5以上が必要です。 保存した情報は、OSX Leopard(10.5)から搭載されたCover FlowとQuick Lookという仕組みを利用して表示します。