第1回:時代は今「DIxAOPコンテナ」 (3/4)

徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

第1回:時代は今「DIxAOPコンテナ」
著者:豆蔵  長谷川 裕一、竹端 進   2005/10/19
前のページ  1  2  3   4  次のページ
DIxAOPコンテナとシステム構築

   DI(依存性の注入)についての解説を行ってきましたが、ではDIxAOPコンテナが提供する依存性の注入はどのようなシステムを構築する時に利用すればよいでしょうか。

   DIxAOPコンテナが解決する依存性の注入は、ステートレスつまり値を持たないオブジェクトをつなぐのに向いています。このようなステートレスなオブジェクトを利用した設計パターンをトランザクションスクリプト(図4)といいDIxAOPコンテナはトランザクションスクリプトを実現するのに向いています。
トランザクションスクリプト
図4:トランザクションスクリプト
(画像をクリックすると別ウィンドウに拡大図を表示します)

   トランザクションスクリプトで扱うドメインオブジェクトは、振る舞いを持たないシンドメイン(やせたドメイン)です。シンドメインに値を設定するのは、DIxAOPコンテナではなくデータベースにアクセスして値を取得するDAO(Data Access Object)です。またDAOが値をセットするシンドメインのことをTO(Transfar Object)やValueObjectなどと呼びます。

   このように見ていくと、ステートレスな制御処理とDBの操作を行うオブジェクトで構成されるWebアプリケーションは、トランザクションスクリプトで設計され、DIxAOPコンテナで実装することが向いているといえるでしょう。

   トランザクションスクリプトに対し、値と振る舞いを持ったコンポーネントがメッセージを交換し合うようなシステムの設計パターンをドメインモデル(図5)といいます。

ドメインモデル
図5:ドメインモデル

   ドメインモデルでドメインオブジェクトが持っている値をセットすることにDIxAOPコンテナは向いていません。DIxAOPコンテナはオブジェクトの作成時にセットすべき値を取得することができないからです(セットすべき値はテーブルに格納されています)。

   ただし、振る舞いをもったドメインに関してもDIxAOPコンテナで管理できるように考えている人たちもいますので、今後はドメインモデルの構築にもDIxAOPコンテナが向いているという時代が来ることも考えられます。


インターフェースベースの設計

   DIxAOPコンテナの仕組みと適用ドメインについては、ここまでで理解していただけたかと思います。

   次にDIxAOPコンテナが多くの開発者に注目され利用されている大きな理由の1つであるインターフェースベースの設計について解説します。

   DIxAOPコンテナは原則として、具象クラスではなくインターフェースを利用してコンポーネント間の依存性を解決します。これによりWebアプリケーションの構築にDIxAOPコンテナを利用すると、レイヤー間にまたがるコンポーネント同士のメッセージ交換を直接行う(図6)のではなく、インターフェースを介して行うインターフェースベースの設計(図7)が促進されます。これによりAADL3の必須要素であるコンポーネント間の結合度を疎にすることが容易に実現できるようになります。

コンポーネント同士のメッセージ交換を直接行う場合
図6:コンポーネント同士のメッセージ交換を直接行う場合
(画像をクリックすると別ウィンドウに拡大図を表示します)

コンポーネント同士のメッセージ交換をインターフェースを介して行う場合
図7:コンポーネント同士のメッセージ交換をインターフェースを介して行う場合
(画像をクリックすると別ウィンドウに拡大図を表示します)

   DIxAOPコンテナを利用したインターフェースベースの設計でコンポーネント間の疎結合を実現できると表6のような利点があります。

メンテナンス性の向上
実装クラス同士の依存度が下がるため、後からロジックを変更してもその影響範囲を極小化できます。
品質の向上
モックを使って簡単にテストできるようになるためテスタビリティが向上します。
開発期間の短縮
使いたい機能の実装ができあがってなくても実装・テストを行えるため並行して作業できるようになります。
再利用性の向上
コンポーネントは通常のJavaのクラス(POJO)であり特定のAPI(EJBなど)に依存しないので再利用できる機会が増えます。

表6:コンポーネント間の疎結合の実現による利点

前のページ  1  2  3   4  次のページ


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


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


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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30