Personal tools
You are here: Home ブログ 井上 アノテーションとPOJOはやはり良いかも
« November 2008 »
Su Mo Tu We Th Fr Sa
            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 29
30            
Recent comments
AirOne v5.0.1出てしまいました inoue 2008-10-29
Re:Reversible debugging in GDB morita 2008-10-09
Re:Google Chromeの発表には驚きました inoue 2008-09-15
Re:Google Chromeの発表には驚きました Anonymous User 2008-09-10
Re:Windowsのタスクマネージャの闇 horii 2008-09-09
Re:Google Chromeの発表には驚きました inoue 2008-09-04
Re:Google Chromeの発表には驚きました inoue 2008-09-04
Re:Google Chromeの発表には驚きました inoue 2008-09-04
Re:Google Chromeの発表には驚きました Anonymous User 2008-09-03
Re:Software Design 2008年2月号「Emacsマスターへの道」の原稿を公開 elim 2008-07-25
Re:Rails(ActiveRecord)のJOINのイディオム inoue 2008-06-20
Re:「ピアレビュー」を読みました Anonymous User 2008-05-12
Categories
カテゴリなし
 
Document Actions

アノテーションとPOJOはやはり良いかも

我ながらタイトルを見て、世間からどれだけ遅れているんだ、と思わずにいられませんが、新しい言葉に飛びつく芸風(?)でも無いのでよしとします。

この辺のサンプルを見ていて思ったことです。

伝統的なJavaの世界では、型の継承による振る舞いの強制が、世界を支配するルールでした。上のサンプルコードは、このルールから解き放たれています。

POJOと言うと、DI(dependency injection)コンテナと一緒に語られることが多いと思います。ちなみに、ぼくはDIが結構好きです。

DIは技法としては新しいですが、伝統的な価値観の延長線上にある技術だと思っています。DIが実現するのは、インターフェースに対してプログラミングせよ、という良く知られた標語です。抽象型(Javaではインターフェース)への依存だけを持つPOJOは、具象型(Javaでは具象クラス)への依存から解放されます。実行時にDIコンテナ(フレームワーク)が具象クラスへの依存を解決(注入)します。DIコンテナが注入するのは具象型への依存であり、抽象型への依存は依然としてコードに残ったままです。つまり、型の継承による振る舞いの強制、というルールは残ったままです。

上のサンプルコードのアノテーションが指定する振る舞いは、従来の型よりも粒度が荒い、より上位な概念、プロトコルやアーキテクチャとでも呼ぶべきレイヤです。

型の継承から離れた振る舞いという意味では、(よくRubyのまつもとさんが書く)ダックタイピングがあります。あれはあれで別にいいのですが、メソッドのシグニチャが一致しているだけ、という世界には危うさを感じます。危うさというのは、コードが複雑化、巨大化した時にきちんと機能できるか、という懸念です。個人的には、ダックタイピングのような緩い世界は不安です。型に対して明示的にプログラミングしている方が安心できます。要は、静的型言語の方が安心できる、と言っているだけですが。

型の継承は、例えそれが抽象型であれ、依存性が発生するという点で窮屈な部分があります。また、粒度が低いので、少し大きな振る舞いや構造を記述するのに、型の記述を積み上げていくのは面倒です。この面倒さに対し、Railsなどでは、規約による簡略化をしています。規約による解決は、暗黙的すぎてあまり好きではありません(Railsは慣れましたが)。アノテーションによる解決は、適度に明示的で、適度に緩いので、上位構造を指定する手段としては良い気がします。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/annotation/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.