🔰 はじめに
本記事は、Struts2ベースで開発された掲示板アプリケーションのv2構成リファクタリングに関する導入編です。
旧バージョン(v1)で得た学びや技術的課題をもとに、アーキテクチャ・パッケージ設計・共通処理の集約を見直し、保守性・拡張性・再利用性を高めたv2構成へと進化させました。
本記事では、v2構成の背景と目的、全体設計の方針を紹介します。以降のシリーズ記事では、各技術トピックを深掘りしていきます。
🧱 なぜv2構成にしたのか?
v1構成で一定の機能実装を進める中で、以下のような構造的課題が顕在化しました。
No | 課題内容 | 補足説明 |
---|---|---|
1 | クラス肥大化と責務の混在 | 例えば User.java にDTO的な役割やビジネスロジックが混在し、見通しが悪化していた |
2 | ディレクトリ構成の曖昧さ | 技術別に分類されておらず、ActionクラスやJSPが機能ごとに整理されていなかった |
3 | 共通処理の分散 | 画面遷移やログインユーザー取得など、似たような処理が各Actionに個別実装されていた |
4 | 画面部品の重複 | 一部のレイアウトやフォーム部品が各JSPにコピペされ、保守性が低下していた |
5 | バリデーションの重複実装 | カスタムバリデーションはどうしても個別実装になるが、可能な範囲で共通化の余地が見えた |
🎯 v2構成の目的と改善方針
目的 | アプローチ |
---|---|
責務の分離 | DTO、Service、DAOの役割を分離し、Model肥大を回避 |
共通処理の集約 |
BaseAction と Interceptor による認証制御・ログイン情報の統一管理 |
UI部品の共通化 | タグライブラリ化、Tilesレイアウトの活用、エラーメッセージ共通化 |
保守性の向上 | パッケージ構成を機能ベースに再編し、管理画面/ユーザ画面を明確に分離 |
拡張性の確保 | Service層の導入により、ビジネスロジックの再利用と単体テストのしやすさを確保 |
🏗️ v2全体構成のイメージ
本プロジェクトでは、以下のようなモダンな多層構成・機能別パッケージ設計を導入しました:
Bulletinboard-v2
├── pom.xml
├── .settings/
├── build/
├── logs/
├── resources/
│ ├── log4j2.xml
│ ├── struts.xml
│ ├── struts.properties
│ └── messages.properties ← メッセージ国際化/共通化
├── src/
│ └── main/
│ ├── java/
│ │ └── com.company.bulletinboard/
│ │ ├── action/ ← フロントコントローラ
│ │ │ ├── admin/ ← 管理画面用(ユーザ・掲示板・投稿)
│ │ │ ├── user/ ← ユーザ機能(ポータル・スレッド・投稿)
│ │ │ ├── login/ ← ログイン・ログアウト
│ │ │ └── common/ ← CancelActionなど共通系
│ │ ├── base/ ← BaseActionなど共通基底クラス
│ │ ├── dao/ ← DBアクセス層(UserDaoなど)
│ │ ├── dto/ ← DTO定義(UserDtoなど)
│ │ ├── interceptor/ ← 認証・権限系Interceptor
│ │ ├── listener/ ← アプリケーションスコープ管理など
│ │ ├── service/ ← ビジネスロジック層
│ │ ├── util/ ← 共通ユーティリティ群(DateUtilなど)
│ │ └── validation/ ← カスタムバリデーター群(ID形式等)
│ └── test/
│ └── java/
│ └── com.company.bulletinboard/
│ └── (テストクラス群)
├── target/
└── WebContent/
├── META-INF/
├── WEB-INF/
│ ├── web.xml
│ └── tiles.xml
├── view/ ← JSPビュー層
│ ├── admin/ ← 管理画面JSP(ユーザ管理など)
│ ├── user/ ← ユーザ向け画面(ポータル、スレッド)
│ ├── common/ ← ログイン、メニュー、エラー画面等
│ └── style.css
└── assets/ ← 画像・JSなど(任意)
🔄 以下の構成要素も組み込み済みです:
-
dao/
:UserDao
/BoardDao
/ThreadDao
/PostDao
-
dto/
:UserDto
/BoardDto
/ThreadDto
/PostDto
-
interceptor/
:AuthInterceptor
(認証Interceptor) -
util
/:DateUtil
など、共通的なユーティリティクラス
📚 今後の連載記事構成
記事番号 | タイトル |
---|---|
📘 Vol.21.0 | v2構成の目的と全体像(本記事) |
📘 Vol.21.1 | パッケージ構成とディレクトリ設計の詳細 |
📘 Vol.21.2 | DTOの分離とリファクタリング実装 |
📘 Vol.21.3 | 共通基底クラス BaseAction と Interceptor の活用設計 |
📘 Vol.21.4 | タグライブラリとUI共通化の実践 |
💬 おわりに
v2構成は「作りやすさ」ではなく「育てやすさ」に重点を置いた設計です。
プロジェクトを進める中で得た試行錯誤や改善アイデアを、今後のシリーズで具体的に紹介していきます。
次回は「📘 Vol.21.1:パッケージ構成とディレクトリ設計の詳細」にて、設計意図をより深堀りしていきます。どうぞお楽しみに!