DIコンテナを使った開発のパターン | Ouobpo

DIコンテナを使った開発のパターン

 先日、Springユーザグループの勉強会に参加してきた。そこでは、Springを使った開発のパターンをみんなで考えるという、ワークショップ形式の面白い試みをしていた。
 今回議論に挙がったのは、インタフェースをどういった方針で用意するかに関するパターンと、Bean定義ファイルをどのように用意すべきかに関するパターンの2つだった。(その結果は、ここに暫定的にまとめられている)

 Spring開発パターン化の試みを振り返って思いついたのは、こうしたパターンの多くはSpringだけでなく、Seasarやその他のDIコンテナ(Pico、HiveMind、Guice・・・)を使った開発にも共有できるだろうということだ。
 J2EEパターン.NETエンタープライズソリューションパターンに対してFowlerのP of EAAがあるように、SpringパターンやSeasarパターンに対して、より汎用的なDIコンテナ開発のパターンがあってもいいのではないかと思った。

 さて、汎用的なDIコンテナ開発のパターンはどういうものになるだろうか。今すぐすべてのパターンを考え出すことは到底できないが、大まかにどんな分類が必要かを考えることはできるだろう。

・ Bean/コンポーネント構成の設定に関するパターン ・・・ どういった方法(XML or プログラミング)で構成を設定するか、設定をどのように組織化して保守するか、依存性の自動注入(a.k.a. autowire)を行なうか、など
・ アプリケーションのアーキテクチャに関するパターン ・・・ Webアプリ、デスクトップアプリ、バッチプログラム等々でそれぞれどんなアーキテクチャ(基本的な責務のレイヤ化)を採用すべきか、トランザクション境界をどこに置くべきか、など
・ Bean/コンポーネントの設計に関するパターン ・・・ どのインジェクション型(セッタ、コンストラクタ、インタフェース、フィールド・・・)を採用すべきか、Bean/コンポーネントのインタフェースをどの粒度で用意すべきか、など
・ AOP/インターセプタの適用に関するパターン ・・・ ロギング、宣言的トランザクション、データソースの動的切り替え等々、AOP/インターセプタにどんな使い方があるか
・ テストに関するパターン ・・・ 単体テスト、統合テストをどういった方針で用意し、実施すべきか

 とりあえず思いつくままに書きなぐってみたが、洗練された分類からは程遠い・・・ もっと適切な分類、分類の列挙漏れがあるはずなので、少しずつ洗練させていってみたいと思う。(もっといい分類を考えられた方はぜひ教えてください)