Google Guiceが便利!

add to hatena hatena.comment (2) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2

model2

Googleが開発したGuiceというDI(Dependency Injection)フレームワークが便利すぎる。

ちょっと、Guiceの勉強してみて3Dプログラムを開発してみたけど、各クラスの依存関係を簡単に分断できました。さらにXMLなど静的ファイルを利用して、あとから機能を追加/削除を簡単にしたい箇所もすべてプログラムに書くことができました。

これでは、何が何やら分からない人も多いと思いますので、分かりやすく書くと、上の画像の右にあるボタンは、DIで簡単に取り外しができるようになっています。

依存関係はすべてJavaのソースコードとして記述してあるので、Eclipseのリファクタリング機能でクラス名やメソッド名、パッケージ階層などを簡単に変更できます。これが、従来通りXMLファイルにパッケージ名やクラス名を書いておいて、リフレクションでクラスをロードするようにプログラムを書いていると追従が非常に困難になってしまいますし、XML記述時のタイプミスも実行時まで発見されない可能性もあります。

さらに、DIでボタン機能が依存注入されているので、他の機能に切り替えるのも非常に簡単で、モッククラスと切り替えてテストプログラムを走らせるのも非常に楽です。

また、普通に公開されているGuiceのバイナリパッケージには含まれていないのですが、リポジトリからソースコードをチェックアウトしてきてビルドすると、extensions\grapher以下に参照関係をグラフで表示するためのライブラリが生成されます。

これを利用すると、.dotという拡張子のファイルを生成でき、Graphvizというツールにかけると以下のような画像が生成されます。これは便利!!!

model21

以下のメソッドにファイル名と、injectorインスタンスを与えるだけでファイルを出力できます。

CODE:
  1. public static void graph(String filename, Injector demoInjector) throws IOException {
  2. PrintWriter out = new PrintWriter(new File(filename), "UTF-8"); //$NON-NLS-1$
  3.  
  4. Injector injector = Guice.createInjector(new GrapherModule(), new GraphvizModule());
  5. GraphvizRenderer renderer = injector.getInstance(GraphvizRenderer.class);
  6. renderer.setOut(out).setRankdir("TB"); //$NON-NLS-1$
  7.  
  8. injector.getInstance(InjectorGrapher.class).of(demoInjector).graph();
  9. }

  • Digg
  • del.icio.us
  • Facebook
  • Google
  • hatena
  • LinkedIn
  • Technorati
  • Tumblr
  • TwitThis

1件のコメント so far »

  1. tdtshのブログ » bookmarks 2009-06-26 said,

    Wrote on 8月 12, 2009 @ 13:04:10

Comment RSS · TrackBack URI

コメントする

名前:

メールアドレス:

Website:

Comment: