📘 Vol.7.1：Struts2 における Model（モデル）について

## 🧭 はじめに

前回は Struts2 の MVC モデル全体像について解説しました。  
今回はその中でも **「Model」層** に焦点をあてて、役割や構成要素、  
そして本プロジェクトでの具体的な活用例を紹介します。

---

## Model層の主な構成要素

## 💡 Model 層とは？

Model 層は、アプリケーションの「**データの管理とビジネスロジック**」を担当します。  
具体的には次の2つの要素に分けられます。




💡 **DAOの役割**  
DAO（Data Access Object）は、データベースとのやりとりを担うクラスで、SQL文の組み立て・実行や結果セットの処理を行います。

💡 **JavaBeansの役割**  
JavaBeansは、プロパティ（データ）に対してgetter/setterを使ってアクセスするシンプルなJavaオブジェクトです。




---

### ✅ DAO（Data Access Object）

DAO は、**データベース操作**を担うクラスです。以下のような責務があります：

- SQL 文の組み立て・実行（SELECT / INSERT / UPDATE / DELETE）
- JDBC や ORマッパー（MyBatis など）との連携
- 結果セットの処理・オブジェクト変換

💡 DAO の目的は「**ビジネスロジックとDBアクセスを分離する**」ことです。

👉 **本プロジェクトでは：**  
[`/dao` 配下に DAO クラスを配置](https://github.com/juehara-crypto/Portfolio_Bulletinboard/tree/master/03.%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/Bulletinboard/src/main/java/com/company/bulletinboard/dao)し、  
ユーザー・スレッド・投稿などの DB 操作を集約しています。

---

### ✅ JavaBeans（または DTO）

JavaBeans は、**データ構造を保持するだけのシンプルな Java オブジェクト**です。

```java
public class User {
    private int userId;
    private String username;

    // getter / setter
}
```

主な特徴は以下の通り：

- 各プロパティへのアクセスは getter / setter を通じて行う

- 引数なしコンストラクタを持つ

- Serializable に対応可能（必要に応じて）


👉 本プロジェクトでは：
[User.java](https://github.com/juehara-crypto/Portfolio_Bulletinboard/blob/master/03.%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/Bulletinboard/src/main/java/com/company/bulletinboard/model/User.java) のようなクラスを利用し、
画面表示用や DAO とのデータ受け渡しに活用しています。

例えば：

- ユーザー情報を保持する User.java

- 掲示板スレッドを保持する Thread.java

- 投稿情報を保持する Post.java

などが存在し、全体のデータ処理をスムーズにしています。

User.javaは、ログインユーザーや投稿者情報など、本プロジェクトの多くの機能で利用される基盤的なJavaBeanです。

---

## 📝 Model 層のポイントまとめ
| 要素        | 役割          | 本プロジェクトの使用場所                               |
| --------- | ----------- | ------------------------------------------ |
| DAO       | DB操作を抽象化・集約 | `/dao` 配下の `UserDao.java` など               |
| JavaBeans | データ構造の保持    | `/model` 配下の `User.java`, `Thread.java` など |

---


### 🚩 次回予告
次回は「[📘 Vol.7.2：Struts2 における Controller（コントローラ）の責務](https://qiita.com/juehara-crypto/items/06b4f9296a296db8f4ba)
」について解説予定です。
POJOベースで構成される Struts2 の Action クラスの特性を活かし、
シンプルかつ柔軟なコントローラ設計を紐解いていきます！


---

## 🧭 Vol.1〜7 関連リンク

| 回 | タイトル | 主な内容 |
|----|----------|-----------|
| Vol.1 | [プログラミングとの再会 – 「画面ありき」で変わった学び方](https://qiita.com/juehara-crypto/items/2fcc53d765dcc25a4fa3) | プログラミング再入門と、**画面駆動の学習法**というユニークなアプローチの紹介。最初に「画面」から考えることでモチベーションを継続。 |
| Vol.2 | [画面駆動設計に基づく設計書の具体例：画面フローからUI設計・処理定義まで](https://qiita.com/juehara-crypto/items/c1fd34b3031b13160f27) | 実際に描いた**画面遷移図・UI設計・処理定義書**を公開し、画面中心の設計手法を解説。 |
| Vol.3 | [詳細設計編：ER図で見るデータ構造と実装の土台](https://qiita.com/juehara-crypto/items/6e6431954dc99ea59054) | 実装前提で設計された **ER図（Entity Relationship 図）** をもとに、データ構造と整合性を設計。 |
| Vol.4 | [Struts2とMavenの基礎と設定ファイルの役割](https://qiita.com/juehara-crypto/items/e37fa1879ae996bee73e) | Struts2の構成とMavenでの管理、`web.xml` や `pom.xml` の役割を丁寧に解説。 |
| Vol.5 | [環境構築編：掲示板アプリケーションの実行準備](https://qiita.com/juehara-crypto/items/7010ae45d35174d3a3a6) | TomcatとEclipseでの動作環境構築。 |
| Vol.6 | [BaseActionクラスの詳細解説【Struts2の要】](https://qiita.com/juehara-crypto/items/a5f244a5f58597f33d06) | すべてのアクションに共通する基底クラス **BaseAction** を定義し、ログ出力や共通処理を集約。 |
| Vol.6.1 | [BaseAction の活用例【共通基底クラスでセッション管理を簡素化】](https://qiita.com/juehara-crypto/items/f4efded5b26e39e49928) | BaseAction を継承する具体的なアクション例を紹介し、セッションやログ処理の統合例を実践。 |
| Vol.7 | [Struts2 における MVC モデルの全体像](https://qiita.com/juehara-crypto/items/761c0b13ed1a5f896bba) | Model-View-Controller の各要素が Struts2 でどう分担されるかを体系的に解説。 |
| Vol.7.2 | [Struts2 における Controller（コントローラ）の責務](https://qiita.com/juehara-crypto/items/06b4f9296a296db8f4ba) | Actionクラスを軸に、入力処理・分岐処理・画面遷移の中核を担うControllerの実装指針を提示。 |
| Vol.7.3 | [Struts2 における struts.xml の書き方と役割](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61) | URLマッピング、結果遷移、アクション定義の方法を丁寧に記述。初心者の詰まりやすいポイントを回避。 |
| Vol.7.4 | [struts.xmlの高度な設定と実践活用（Struts2）](https://qiita.com/juehara-crypto/items/bf03adbd840c8f4e2044) | namespaceの活用や画面単位での分離設計、開発時の保守性向上テクニックを紹介。 |

---