Spring3入門

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

JavaフレームワークSpringの入門書。

DI(Dependency Injection)とは、日本語に訳すと「依存性の注入」となる。具体性に欠けてピンとこないと思うが、簡単に言えば「オブジェクト間の依存関係を作成」するものだ。オブジェクト間の依存関係を作成するというのは、あるオブジェクトのプロパティ(インスタンス変数のこと)にそのオブジェクトが利用するオブジェクトを設定することだ。

DIは値をRDBから持ってきてインスタンス化する作業には向かない。
ここを勘違いして、ドメインオブジェクト間の依存関係をDIで構築してから値をRDBから読み込んで設定するようなことはしてはいけない。レイヤの部品で言えば、コントローラとサービス、サービスとDAOの依存関係を構築するにはDIが向くが、サービスとドメイン、DAOとドメインの依存関係の構築にはDIは向かないのだ。

DIやAOPというキーワードや用語解説を読んでも中々腹に落ちないものが、本書の解説に従うことで、イメージをつかめたような気がする。
Webアプリケーションをきれいに作るには、部品化するのが良い。部品化とは、コンポーネント同士が直接呼び合うのではなく、インタフェースを通して呼び出すという手順をはっきりと確立することだと理解した。
本書では『インタフェースは「変化が少ない方」「それがないと困る方」が提供すべき』と説明され、更に『さまざまな電気製品と電気配線のコンセントがあるならば、インタフェースを提供するのはコンセントの側だ』と例示されていて、これがとても納得できた。
DIは部品化を実現して、部品置換による柔軟性の提供や、再コンパイルなしでスタブ部品に置き換えられることによるテスト容易性を確保するため、依存性をJavaソース内から排除して、定義ファイルやアノテーションに置き換えることが主眼。

AOPとは、業務など特定の責務を持ったクラス(たとえば、注文クラスとか口座クラス)の中に、その責務を果たすための本質的な処理だけを記述したいという考えから、本質ではない余計な処理を外出しする技術のことだ。
より具体的には、ログ出力や例外処理など共通化できる処理を、Aspectという1つの単位にまとめることによって、あるオブジェクトが本来やるべきことだけを行うようにする技術だ。

もう一つ、AOPという言葉が意味することも合わせて理解できた。ソースコード中に繰り返し現れるロギングなどの単調な処理を、できるだけ書かなくてよくするという動機について、サンプルコードによって学ぶことができる。
他にも本書では、Spring MVCの説明や、Struts、MyBatisなど他のFWとの協調について解説がされていて、Springにまつわる諸々を知ることができた。
学生の頃に勉強をしたJavaにはアノテーションはまだ登場していない時代で、ソースコード中に現れるアットマークの意味も、これまで碌に理解できていなかった。そしてGoFデザインパターンもきちんと理解できていない中で、オブジェクト指向設計の有難みというもの今一つ身を以て知ることができていなかった。
『犬は動物で、継承される。動物クッキーの型枠がクラスで、動物クッキーはインスタンス。』という段階から、実際にJavaで保守性が高く部品化されたアーキテクチャを考えられるようになる段階との間のステップを、少しずつでも埋めていけられるように、知識をつけたい。