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.10.0:DAO / DTO / JavaBeansとは? ― データ層設計の全体像と役割分担 ―

Last updated at Posted at 2025-05-24

🟦 はじめに

Webアプリケーションにおいて、「入力されたデータを処理してDBに保存し、結果を画面に返す」 という一連の処理は、どの案件でも不可欠な流れです。

この中で中心的な役割を担うのが、

  • DTO(Data Transfer Object)

  • DAO(Data Access Object)

  • JavaBeans(Javaでのデータ構造の基礎的形式)

です。
本章ではこれら3つの役割や関係性、MVCフレームワーク(特にStruts2)での位置付けを明確に整理し、次章以降の実装編や構築編に向けて「基礎知識の地盤」を固めます。


🟨 1. JavaBeansとは? ~ DTOのベースとなる規約 ~

JavaBeansは、Javaにおける「データ構造クラス」の標準的な書き方です。

🔹 JavaBeansの基本ルール

  • publicクラスであること

  • 引数なしのコンストラクタがあること

  • getter/setterが正しく定義されていること

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

    public int getUserId() { return userId; }
    public void setUserId(int userId) { this.userId = userId; }

    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
}

🔹 なぜ必要なのか?

  • JSPやStruts2では、自動的にプロパティがバインディングされる(例:フォーム入力 → Bean)

  • EL式でのプロパティ参照(${user.username})などで動作する前提がJavaBeans準拠

JavaBeansはDTOやModelを構成する「最小単位」であり、全てのデータ設計の土台になります。


🟨 2. DTO(Data Transfer Object)とは?

DTOは、画面とのやり取り用に使うデータの器(オブジェクト) です。

🔹 役割

  • 画面入力データを受け取る

  • DBから取得した結果を画面に返す

  • DAOやビジネスロジックと連携する中継役

🔹 特徴

  • 複数の値を一括で持ち回せる

  • 仕様変更があっても影響をコントロールしやすい

  • DBエンティティと同一とは限らない(Viewに最適化された構造も可)

🔹 Struts2での使用例

フォームに入力されたデータをDTOにマッピングし、そのDTOをActionクラスで受け取り、DAOに渡して処理する構成が一般的です。

🔹 Struts2での使用例

フォームに入力されたデータをDTOにマッピングし、そのDTOをActionクラスで受け取り、DAOに渡して処理する構成が一般的です。

<s:form action="login">
  <s:textfield name="user.username" label="ユーザー名"/>
  <s:password name="user.password" label="パスワード"/>
</s:form>

public class LoginAction extends ActionSupport {
    private User user;

    public String execute() {
        if ("admin".equals(user.getUsername())) {
            return SUCCESS;
        }
        return ERROR;
    }

    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }
}

この例では、DTO(Userクラス)が直接フォームと連携しているのがわかります。


🟨 3. DAO(Data Access Object)とは?

DAOは、データベースとやり取りする責任を担うクラスです。

🔹 役割

  • SQLの実行と結果の取得

  • DTOへのデータ詰め込みと返却

  • DBアクセスの共通処理の一元化

🔹 DAOの基本構成(例)

public interface UserDao {
    User findById(int id);
    List<User> findAll();
    void insert(User user);
    void update(User user);
    void delete(int id);
}
public class UserDaoImpl implements UserDao {
    public User findById(int id) {
        Connection conn = ...;
        PreparedStatement ps = ...;
        ResultSet rs = ...;
        // 結果をUserに詰めて返す
    }
}

DAOはSQL文を内部に持ち、データ取得後にDTOに詰めてActionクラスへ返す“裏方”です。


🟨 4. MVC構成の中での役割分担

Struts2のようなMVCフレームワークでは、以下のように役割が明確に分かれます:

[View (JSP)]
    ↑      ↓      ← EL式やタグでDTO参照
[Action (Struts2)]
    ↑      ↓      ← execute()内でDTOとDAOを操作
[DTO] ⇄ [DAO] ⇄ [DB]

  • DTO:ViewとAction間のデータ輸送係

  • DAO:DBからDTOへのデータ取得・更新を担う

  • Action:DTOとDAOを橋渡しし、処理の流れを制御


🟦 5. 今後の連載とのつながり

本記事で紹介したJavaBeans / DTO / DAOの設計方針は、Vol.10の各章で以下のように深掘りしていきます:

内容
Vol.10.1 DTO設計のベストプラクティス(命名規則・フィールド設計)
Vol.10.2 DAOのインタフェース設計と実装パターン
Vol.10.3 DB接続クラスの共通化とドライバ設計
Vol.10.4 Actionとの連携実装(Struts2との融合)
Vol.10.5 DAO・DTOのテスト設計(JUnitやH2活用)

さらに、Vol.11以降(掲示板構築編) では、ここで作成したDTO/DAOをベースに、実際の機能(掲示板登録・編集・投稿処理)に落とし込んでいきます。


✅ まとめ

  • JavaBeansはDTOやModelの前提となるJavaの基本規約

  • DTOは画面 ↔ 処理層間のデータ中継役

  • DAOはDBアクセス専用の裏方担当で、DTOを操作する

  • Struts2ではActionがDTOとDAOを結びつけ、MVC構造を実現する

  • この構成は、今後の実装・構築編でも再登場する重要な「アーキテクチャの基礎」


📘 次回予告:Vol.10.1

次回は「DTO設計のベストプラクティス」をテーマに、命名規則・共通DTO化・フォーム連携の実例などを解説していきます!

内容
Vol.10.1 DTO設計のベストプラクティス(命名規則・フィールド設計)
Vol.10.2 DAOのインタフェース設計と実装パターン
Vol.10.3 DB接続クラスの共通化とドライバ設計
Vol.10.4 Actionとの連携実装(Struts2との融合)
Vol.10.5 DAO・DTOのテスト設計(JUnitやH2活用)


✨ シリーズまとめ(Vol.10.x バリデーション編)


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?