依存性の注入と設定ファイル

2013-06-02 12:50:13

ソフトウェアパターンの一つとして、依存性の注入(以下、DI)がある。

ざっくり説明すると、
プログラム間の依存をなくすための仕組みなのだが、
例をあげると、
ファイルに文字を書き込むという機能があった場合、
「文字を書き込む」という処理の担当はある一つのクラスが行い、
「ファイルに」という部分をそのクラスの外部から指定してやる。
利点は、「ファイルに」が、「データベースに」や「標準出力に」になった場合でも
外部からの指定を変えてやれば、「文字を書き込む」というクラスに変更がいらないことである。
また、これはテストし易いということにも繋がる。

さてここからが本題。
DIの話になるとよく出てくるのが、Spring Framework。
言わずとしれたJavaの軽量コンテナフレームワークだ。

このSpringでDIを学ぼうとすると、
必ず設定ファイルとしてXMLを用意してって話になる。
(最近はアノテーションとかもあるみたいね。ごめん、最近のは詳しく知らないんだw)

なんでこんな面倒なことするの?っていつも思ってた。
DIって、設定ファイルのことなの?別に設定ファイルでなくてもできるんじゃないの?ってね。

そしたら、角谷さんが訳した、Martin Fowlerの記事が見つかったので、読んでみた。
Inversion of Control コンテナと Dependency Injection パターン

さすがは大御所!すごく分かり易い!

記事の中に、「コードか設定ファイルか」という項目があるが、
ここを読むと、やはり設定ファイルは必須ではないというのが分かる。

重要なのは、設定を利用から分離すること。
もし設定ファイルではなく、コードで設定を行うにしても、
そのコードはインターフェースでつながれていて、決して依存しないようにしなければならないということだ。
Martin Fowlerは、「すべての設定をプログラミングから簡単に行えるようなインタフェースを必ず用意すること。 設定ファイルを分離するのは、オプション機能でよい。」とアドバイスしている。

うん、一つ疑問が解決された。気分がいいね!
でも、Springは設定ファイルゴリ押しなんだろうという疑問がでてきた。。。
さて、なんでだろうな。
Springに詳しい友人にでも聞いてみるか。