「Guice」カテゴリーアーカイブ

squareがBob Leeを引き抜いたらしい

GoogleのソフトウェアエンジニアのBob Leeがsquareに引き抜かれたらしい

Bob Leeは、Googleのテクノロジーを追いかけていると、ちょいちょい出てくる名前。GuiceやAndroidあたりで良く出てくる。

squareサービス開始前に4000万ドルの起業価値が付いたことで一躍有名になったスタートアップ。

squareは近々あと2名の雇用者を発表するらしいので、目が離せない!

Google Guiceが便利!

model2

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

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

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

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

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

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

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

model21

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

public static void graph(String filename, Injector demoInjector) throws IOException {
PrintWriter out = new PrintWriter(new File(filename), "UTF-8"); //$NON-NLS-1$

Injector injector = Guice.createInjector(new GrapherModule(), new GraphvizModule());
GraphvizRenderer renderer = injector.getInstance(GraphvizRenderer.class);
renderer.setOut(out).setRankdir("TB"); //$NON-NLS-1$

injector.getInstance(InjectorGrapher.class).of(demoInjector).graph();
}