Personal tools
You are here: Home ブログ 井上 アノテーションとPOJOはやはり良いかも
« December 2010 »
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 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
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.