Seasar2で学ぶDIAOP
〜アスペクト指向によるJava開発

[表紙]Seasar2で学ぶDIとAOP 〜アスペクト指向によるJava開発

紙版発売

B5変形判/336ページ

定価3,520円(本体3,200円+税10%)

ISBN 4-7741-2855-4

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

オブジェクト指向プログラミングの弱点を補う技術として,DI(依存オブジェクト注入)とAOP(アスペクト指向プログラミング)が注目されてます。本書はJavaアプリケーション開発を例にDI+AOP導入のノウハウを解説します。DIコンテナ+AOPフレームワークの実例として,話題のSeasar2を使います。

こんな方におすすめ

  • Javaでオブジェクト指向開発に取り組んでいる人
  • 従来のオブジェクト指向プログラミングに対して問題意識を持っている人
  • アスペクト指向プログラミングについて知りたい人

著者の一言

本書がターゲットにするプログラミングは「実装設計」です。どんな観点でプログラムを構成するか。開発のスタートからサービスの終了までを見通して,現実的な方法を立案し実施すること――それが実装設計です。

筆者は,ソフトウェア開発の要である実装設計が好きです。それは考えることであり,作ることです。本書を通して,読者のみなさんに実装設計の面白さと困難さを伝えられること,そして今後の開発のお役に立てることを願います。

目次

第1章 アプリケーションアーキテクチャとDI/AOP

  • 1.1 アプリケーションの要件
    • 1.1.1 アプリケーションアーキテクチャの必要性
    • 1.1.2 業務システムとアプリケーションアーキテクチャ
    • 1.1.3 分割と統合
    • 1.1.4 機能要件と非機能要件
  • 1.2 よいシステムはマンデルブロ集合に似ている
    • 1.2.1 モジュールの差し替え
    • 1.2.2 オブジェクト指向プログラミングの限界
    • 1.2.3 そしてアスペクト指向プログラミングへ

第2章 DI依存オブジェクトの注入

  • 2.1 本章で利用するサンプルの準備
    • 2.1.1 プロジェクトの読み込み
    • 2.1.2 プロジェクトに含まれるファイル
    • 2.1.3 ファイルの操作
  • 2.2 ハローワールド
    • 2.2.1 ハローワールドのインタフェース
    • 2.2.2 DIを利用しないハローワールド
    • 2.2.3 DIを利用したハローワールド
  • 2.3 DIを利用することの意義
    • 2.3.1 DIはどこが簡単なのか?
    • 2.3.2 依存関係の整理
    • 2.3.3 依存オブジェクト取得ロジックの分離
    • 2.3.4 依存オブジェクトの宣言

第3章 コンテナの種類

  • 3.1 DIの種類とオブジェクトの注入方法
    • 3.1.1 サンプルプログラムについて
    • 3.1.2 サンプル実装の制限
  • 3.2 コンストラクタインジェクション
    • 3.2.1 テストプログラム
    • 3.2.2 テストプログラムが利用するプロパティファイル
    • 3.2.3 コンストラクタインジェクションコンテナ実装
    • 3.2.4 実装の注意点
    • 3.2.5 コンストラクタインジェクションに関する考察
  • 3.3 セッタインジェクション
    • 3.3.1 テストプログラム
    • 3.3.2 テストプログラムが利用するプロパティファイル
    • 3.3.3 セッタインジェクションコンテナの実装
    • 3.3.4 セッタインジェクションに関する考察
    • 3.3.5 独自実装する場合の考慮点
  • 3.4 インタフェースインジェクション
    • 3.4.1 テストプログラム
    • 3.4.2 テストプログラムが利用するプロパティファイル
    • 3.4.3 インタフェースインジェクションコンテナ実装
    • 3.4.4 インタフェースインジェクションの実装に関する考察(1)
    • 3.4.5 インタフェースインジェクションの実装に関する考察(2)
  • 3.5 フィールドインジェクション
    • 3.5.1  EJB 3.0とフィールドインジェクション
    • 3.5.2 InjectアノテーションとInjectableアノテーション
    • 3.5.3 フィールドインジェクションのテストプログラム
    • 3.5.4 テストプログラムが利用するプロパティファイル
    • 3.5.5 フィールドインジェクションコンテナの実装
    • 3.5.6 フィールドインジェクションに関する考察
  • 3.6 サービスロケータ(参考)
    • 3.6.1 テストプログラム
    • 3.6.2 テストプログラムが利用するプロパティファイル
    • 3.6.3 サービスロケータ実装
    • 3.6.4 サービスロケータとDIコンテナの差について

第4章 AOP〜共通の処理の組み込み

  • 4.1 AOPの用語
    • 4.1.1 AOPとクロスカッティングコンサーン
    • 4.1.2 「アスペクト」の意味とAOPの構成
    • 4.1.3 AOPの構成
  • 4.2 JavaとAOP
    • 4.2.1 OOPLでのAOPの制限
    • 4.2.2 ダイナミックプロクシ
    • 4.2.3 ダイナミックプロクシを利用したAOP
    • 4.2.4 AOPの例〜利用対象のオブジェクト
    • 4.2.5 AOPの例〜クライアント
    • 4.2.6 AOPの例〜ウィーバ
    • 4.2.7 AOPの例〜インターセプタ
    • 4.2.8 サンプルについてのまとめ
    • 4.2.9 ダイナミックプロクシを利用したAOPの実アプリケーションへの適用
    • 4.2.10 AOPフレームワーク

第5章 Webアプリケーション開発

  • 5.1 Seasar2の役割とWebアプリケーション開発
    • 5.1.1 Seasar2のプロダクト
  • 5.2 S2コンテナを使う理由 〜多層化の意義とその開発方法〜
    • 5.2.1 ビジネスロジックの分離
    • 5.2.2 分離が必至のポイント
    • 5.2.3 環境移行時に活きるビジネスロジックの分離
    • 5.2.4 多層化に対する反対意見
    • 5.2.5 4コマ漫画になぞらえるアプリケーション開発の流れ
    • 5.2.6 ライン生産とセル生産
    • 5.2.7 オープンシステムにおけるソフトウェアの変化
    • 5.2.8 複雑化し大規模化したシステムが多層化を求める
    • 5.2.9 ライン生産方式の終焉
    • 5.2.10 開発のモジュラー化
    • 5.2.11 S2コンテナを使う理由
  • 5.3 本書のサンプルプログラムについて
    • 5.3.1 サンプルプログラムについて
    • 5.3.2 サンプルの仕様

第6章 ユースケースとアプリケーションアーキテクチャ

  • 6.1 アプリケーション仕様
    • 6.1.1 Dikiのユースケース
    • 6.1.2 必要なユーザインタフェース:メニューボタン
    • 6.1.3 必要なユーザインタフェース:ページ
    • 6.1.4 必要なユーザインタフェース:ページ上のコントロール
    • 6.1.5 必要なストレージ
  • 6.2 アプリケーションアーキテクチャ
    • 6.2.1 くーすによる処理
    • 6.2.2 Goyaによる処理
    • 6.2.3 プレゼンテーション−ドキュメントパターン(PD)による処理
    • 6.2.4 サンプルプログラムへの適用

第7章 サンプルアプリケーションの構成と実行

  • 7.1 アーカイブの種類
    • 7.1.1 db.zipファイル
    • 7.1.2 プロジェクトアーカイブの構成

第8章 表示画面の作成と表示テスト

  • 8.1サンプルのセットアップ
    • 8.1.1 プロジェクトのビルド
    • 8.1.2 プロジェクトの実行
    • 8.1.3 プロジェクトのデバッグ
    • 8.1.4 デバッグ時ブレークポイントの設定
  • 8.2 Dikiの画面構成
    • 8.2.1 ベースHTMLについて
    • 8.2.2 ヘッダメニュー
    • 8.2.3 ページ表示(index.html)
    • 8.2.4 index.htmlに関連するビーン
  • 8.3 プログラムの実装
    • 8.3.1処理の内容
    • 8.3.2 実装の前に考える点
    • 8.3.3 インタフェースの定義
    • 8.3.4 例外処理
    • 8.3.5 初期データ
  • 8.4. 表示処理の実装
    • 8.4.1 コントローラの実装
    • 8.4.2 ShowActionImpl.javaの要点
    • 8.4.3 DTOの実装
    • 8.4.4 diconの定義
    • 8.4.5 実行例

第9章 編集画面の作成

  • 9.1 サンプルのセットアップと実行
    • 9.1.1 サンプルの実行
    • 9.1.2 Dikiの文法
    • 9.1.3 Wiki記法を試す
    • 9.1.4 プラグイン記法

第10章 編集処理の全体構成

  • 10.1 論理的なコンポーネントへの分割
    • 10.1.1 アプリケーションのGoyaへのマッピング
    • 10.1.2 パッケージ分割の考え方
  • 10.2 設計時のパフォーマンスの考慮とDI/AOP
    • 10.2.1 パフォーマンスについて考えるタイミング
    • 10.2.2 キャッシュのパフォーマンスについて考える
  • 10.3 コンポーネント間インタフェース
    • 10.3.1 どんなインタフェースが最適か?
    • 10.3.2 開発順とインタフェース決定
    • 10.3.3 DxOのインタフェース

第11章 S2Daoの利用

  • 11.1 S2Daoの特徴
  • 11.2 S2Daoを利用したDAOの構造
  • 11.3 S2Daoの利用例
    • 11.3.1 entityクラスの実装
    • 11.3.2 DAOインタフェースの定義
    • 11.3.3 DAOクライアントの実装
    • 11.3.4 DAOのdiconファイル定義
    • 11.3.5 S2Daoのソース読解の勧め

第12章 画面表示とビジネスロジックの実装

  • 12.1 編集用HTMLとプレビュー用HTML
    • 12.1.1 編集用HTML
    • 12.1.2 プレビュー用HTML
    • 12.1.3 編集画面のクライアント/サーバ間のページの流れ
  • 12.2 コントローラコンポーネント
    • 12.2.1 Beanの実装
    • 12.2.2 DTOの実装
  • 12.3 ビジネスロジックのコンポーネント
    • 12.3.1 インタフェース
    • 12.3.2 実装
    • 12.3.3 データコンポーネント

第13章 データ処理

  • 13.1 データコンポーネントの構造
    • 13.1.1 ファクトリクラスのインタフェース
    • 13.1.2 PageDataImplの構成
  • 13.2 データコンポーネントの実装

第14章 HTML生成処理

  • 14.1 DikiとWiki文法
    • 14.1.1 HTML変換処理の構造
    • 14.1.2 HTML変換処理のインタフェース
    • 14.1.3 HTML変換コンポーネントの種類
    • 14.1.4 HTML変換コンポーネントごとのインタフェース
    • 14.1.5 変更不可能なコンポーネントを変更可能なように実装する意味
    • 14.1.6 設定ファイルの考慮点

第15章 完成へ向けて−例外処理の実装

  • 15.1 本章のサンプル
    • 15.1.1 step2からの主な変更点
    • 15.1.2 S2JSFのエラーページ処理
    • 15.1.3 ページ一覧の実装

著者プロフィール

arton

artonは,垂直統合型システムベンダーに勤務するソフトウェアエンジニアです。最近,名刺の肩書が「コンサルタント」になって、ちょっと混乱しています。困ったものです。Officeで好きなツールはPowerPoint,嫌いなツールは校正ありに設定したOffice:macのWord,2007では大好きなカイル君の不在が嘆きの種ですが,リボンのおかげでExcelがそれなりに使えるようになったのでまあいいかな,というところです。