TOP比較データ> サンプルアプリケーションへのインターフェースの導入
徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

第1回:時代は今「DIxAOPコンテナ」
著者:豆蔵  長谷川 裕一、竹端 進   2005/10/19
前のページ  1  2  3  4
サンプルアプリケーションへのインターフェースの導入

   ここまで、DIxAOPコンテナのDI(依存性の注入)について特徴や利点などを取り上げて解説しましたが、ここからはAADL1で設計された簡単なWebアプリケーションをDIxAOPコンテナを利用することでAADL3にしてゆく過程の一部を解説していきます。なお、サンプルアプリケーションをAADL3にしていく過程は本連載を通して行います。今回はその最初の部分について解説します。

   まずはDIxAOPコンテナを利用したインターフェースベースの設計の利点を感じていただくために、従業員の表示、登録、削除を行う「従業員管理Webアプリケーション」を例に、インターフェースベース設計の前と後でどのように変わるのかを解説します。

   図8は従業員管理Webアプリケーションの画面(Seasar2用)になります。図9はテーブルです。非常に簡単な構造ですが、設計について理解していただくにはこれだけで十分です。
従業員管理Webアプリケーションの画面(Seasar2用)
図8:従業員管理Webアプリケーションの画面(Seasar2用)
(画像をクリックすると別ウィンドウに拡大図を表示します)

使用するテーブル
図9:使用するテーブル

   図10は「従業員管理Webアプリケーション」のAADL1の設計です。もちろんトランザクションスクリプトで設計されていますので、ビジネスオブジェクトEmployeeManagerやDBアクセスオブジェクトEmployeDaoは値を持たないステートレスなオブジェクトです。TOであるEmployeeはテーブルと1対1で対応します(図10からは省略しています)。

AADL1の設計
図10:AADL1の設計
(画像をクリックすると別ウィンドウに拡大図を表示します)

   しかし、これではレイヤー間のコンポーネントが密に結合しているため、レイヤーごとに開発者を分けることが困難です。これが大規模システムであればレイヤーごとに開発チームを分けての並行開発が困難になります。次にコンポーネント間にインターフェースを導入した設計が図11です。

コンポーネント間にインターフェースを導入した設計
図11:コンポーネント間にインターフェースを導入した設計
(画像をクリックすると別ウィンドウに拡大図を表示します)

   ここでもまだDIxAOPコンテナは利用していませんが、インターフェースを導入したことでレイヤー間が疎結合になっているように見えます。

   インターフェースを導入したことにより、インターフェースさえ守ればコンポーネント間の結合も容易になり、レイヤーごとに開発者を分けやすくなりました。

   しかし今のままでは、レイヤー間のコンポーネントが疎結合になったように見えますが、実はまだ疎結合になりきっていません。

   下記はEmployeeManagerImplのソースコードです。

public class EmployeeManager {
  private EmployeeManager empManager;
  private EmployeeManager() {;}
(省略)
  public List findAll() throws SQLException {
    Connection conn = null;
(省略)
    EmployeeDao dao = new EmployeeDaoImpl();・・・・・・(1)
    List employeeList = null;
    try {
      employeeList = dao.findAll(conn);
      conn.commit();
    } catch(SQLException e) {
      conn.rollback();
(省略)
    } finally {
      conn.close();
(省略)
    }
    return employeeList;
  }
(以下省略)
   (1)でEmployeeDaoImplを生成しています。つまり、EmployeeManagerImplは利用する実装オブジェクトを知っている必要があります。これではレイヤーごとのテストでEmployeeManagerImplが利用していたMockオブジェクトを結合テスト時にEmployeeDaoImplにソースコードを書き換える必要がでてきます。

   EmployeeManagerImplがEmployeeDaoインターフェースだけを知って、実装オブジェクトを知らなくてもよくするための方法は1つではありませんが、最も簡単な方法はDIxAOPコンテナを導入することです。

   この回答は次回、Seasar2とSpringのインストール手順を記述した後、SeasarとSpringの解説で個別に解説します。

前のページ  1  2  3  4


株式会社豆蔵 長谷川 裕一
著者プロフィール
株式会社豆蔵  長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。


株式会社豆蔵 竹端 進
著者プロフィール
株式会社豆蔵  竹端 進
鉄鋼系SIerを経て現職に。現在はオープンソースプロダクトに関するコンサティング、開発支援、教育を行うチームに所属。日々、新たな技術をどのように生かしていくかを考える毎日。現在の注目対象はSeasar2とMaven。


INDEX
第1回:時代は今「DIxAOPコンテナ」
  はじめに
  ドキュメント、教育、サポート
  DIxAOPコンテナとシステム構築
サンプルアプリケーションへのインターフェースの導入