0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 Vol.21.0:掲示板アプリケーションv2構成の目的と全体像

Last updated at Posted at 2025-06-02

🔰 はじめに
本記事は、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肥大を回避
共通処理の集約 BaseActionInterceptor による認証制御・ログイン情報の統一管理
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:パッケージ構成とディレクトリ設計の詳細」にて、設計意図をより深堀りしていきます。どうぞお楽しみに!


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?