TOPシステム開発> はじめに
徹底比較!!Ruby on Rails vs Javaフレームワーク
徹底比較!!Ruby on Rails vs Javaフレームワーク

第4回:DIコンテナとの比較

著者:アスタリクス  大西 正太   2006/9/20
1   2  3  4  次のページ
はじめに

   今回は、ここ数年非常に注目されている技術であるDI(Dependency Injection)コンテナをテーマに取り上げます。

   DIコンテナはアプリケーションのオブジェクトを疎結合にし、柔軟性を与えるものです。その結果得られる代表的なメリットとして表1のようなものがあげられます。いずれも品質向上に寄与する重要な効果です。
モックオブジェクトによるテスタビリティ向上
単体テストにモックオブジェクトを導入でき、テスタビリティを向上させられる。
トランザクション指定の簡易化
トランザクションを簡易に指定できるようになり、障害時処理の高品質化が実現される。

表1:DIコンテナの代表的なメリット

   しかし、そもそもRailsにはDIコンテナという考え方が取り入れられていません。そこで表1にあげたDIのメリットに関するRailsでの対応・非対応の状況を比較するという形で進めていきます。

   なお、DIコンテナから得られるメリットはDIコンテナ上に実現されたAOPの力によるものが多いですが、今回はAOPもまとめて「DIコンテナ」として扱います


DIコンテナとは

   まず、簡単にDIコンテナについてのおさらいをします。


JavaとDIコンテナ

   静的型付言語であるJavaではコンパイル時にクラスの関係が固定化されてしまいます。そこでテキストファイルにクラスの関係を外にだして記述するようにして、実行時に関係が決定されるようにしたのがDIコンテナです。

   これで、Java言語が従来持っている堅牢さに加えて、ダイナミックさを持つこともできるようになりました。また、DIコンテナはオープンソースで数多く開発されています(表2)。

Spring Framework DIコンテナの草分け
Seasar2 先進的な国産DIコンテナ
Pico Container シンプルなDIコンテナ

表2:代表的なDIコンテナ

   今回は、DIコンテナの草分けといえるSpring Framework(バージョン1系)を代表として取り扱います。


モックオブジェクト

   それでは、DIコンテナから得られるメリットがRailsでどのように対応されているのかを見ていきます。まずはテストへのモックオブジェクト導入についてです。


モックオブジェクトとは

   一般にオブジェクト同士はお互いに依存し合っています。従って、あるオブジェクトのロジックをテストするには、依存しているオブジェクトも動作可能である必要があります。

   モックオブジェクトとは、何らかの原因でテスト時に利用ができないオブジェクトを代替し、ダミーの返答をするものです。例えば、クレジットカードの決済処理のようにテストの度に動かすわけには行かないクラスのモックオブジェクトを作成することで、呼び出し側の単体テストが実施可能になります。

モックオブジェクト
図1:モックオブジェクト

1   2  3  4  次のページ


デル株式会社
著者プロフィール
株式会社アスタリクス  大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第4回:DIコンテナとの比較
はじめに
  Java/DIのモックオブジェクト
  Railsでモックを実現
  Java/DIのトランザクション