SpringFramework 職業訓練83日目

SpringFrameworkとは?

SpringFrameworkとは汎用性の高いフレームワークです。もちろんWebアプリケーション作成のためのフレームワークとして利用できます。

SpringFrameworkの象徴的な技術としてDIとAOPがあります。これらの技術を活かしてソフトウェアの品質を向上しているのです。

クラスの結合度について

DIとAOPの説明に入る前にクラスの結合度について説明します。

・ケース1

あるプログラムの中にクラスAとクラスBがあります。クラスAでクラスBの機能を使うためには、クラスAでクラスBのインスタンスを生成し、クラスBのインスタンスメソッドをコールします。

この場合クラスBに変更がある場合、当然ですがクラスAも変更があります。このようにどちらか一方が変わると、もう一方も変わってしまう状態を結合度が高い(密結合)と言います。保守管理が難しくなるのでソフトウェアの品質は低いという評価になります。

・ケース2

先ほどのクラスBのインタフェースをWebインタフェースとしてPOSTパラメータで入力データを渡し、HTTPレスポンスで実行結果を得るAPIとすれば、その都度クラスBを呼び実行するので、クラスBに変更があってもクラスAを修正する必要はありません。

このように一方が変わっても、もう一方を変える必要が無いことを(疎結合)と言います。保守管理が容易になるのでソフトウェアの品質は高いと言えます。

DIとは?

DIとは(Dependency Injection)の略です。日本語では「依存性の注入」と言います。これじゃさっぱりわかりませんよね。これから分かりやすく説明します。

まず先ほどのクラスの結合度のお話でいうところのケース2の疎結合を目指し品質を高めることを目的とする機能です。

どんな機能かというと、アプリケーション(先ほどのクラスA)が必要とする機能を持つクラスのインスタンスの生成をするのではなく、フレームワークから取得します。

またアプリケーションが利用しているのはクラスではなく、インタフェースです。インタフェースを実装するクラスの生成もフレームワークが行います。この際のクラスの実装やインスタンスの初期値は設定ファイル(XMLファイル)で行います。

このように考えればアプリケーションを実行するクラス(先ほどのクラスA)と必要な機能を持つクラス(先ほどのクラスB)との間にフレームワークが入り、クラスBのインスタンスの管理をし、アプリケーションで呼び出されるたびにインタフェースとして渡すという作業を行うのです。

要するに機能を持つクラス(クラスB)とフレームワークは密結合と言えます。アプリケーションとクラスBの間にフレームワークという密結合となる存在を入れるという考えのアプローチをすると「依存性の注入」というの理解しやすくなるの絵はないでしょうか?少々まどろっこしい説明ではありますが伝わっていれば何よりです。

AOPとは?

DIを一言で言うとクラスの実装をフレームワークを介すること切り離すことです。AOPは共通の処理をフレームワークを介することで切り離します。

基本的なプログラミングでは共通処理をまとめたクラス(共通処理クラス)を作成し、アプリケーションで実行するものを共通クラスのインスタンスを生成し、メソッドをコールします。

この共通クラスを外部から挿入してしまうとい方法をAOPと言います。また外部から挿入する処理のことをメソッドと言います。この設定情報もXMLファイルによって設定します。

--------------------------------------------------------------------------

明日から実際に動かしてみるので虚はこの辺で失礼します。



この記事が気に入ったらサポートをしてみませんか?