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.1:DTO設計のベストプラクティス(命名規則・フィールド設計)

Last updated at Posted at 2025-05-24

Struts2でのDTO(JavaBeans)の正しい扱い方・設計思想を解説!
命名規則、フィールド設計、そしてJSPからDTOへアクセスできる“仕組み”まで、実務で役立つ知識を整理します。


✅ DTOとは? ― ViewとActionをつなぐ“輸送係”

DTO(Data Transfer Object)は、画面とサーバー側(Actionクラス)とのデータのやり取りを行うための中継役です。

Struts2におけるDTOの主な役割は:

  • 📥 JSPから入力された値をActionクラスに渡す

  • 📤 Actionクラスで加工・取得したデータをJSPで表示する

つまり、「データの入れ物」としての純粋なJavaBeansであり、ビジネスロジックは持ちません。

✅ JavaBeansとしての設計ルール(命名規則)

DTOは、JavaBeans仕様に従って設計される必要があります。
そのため、次のルールに従うのがベストプラクティスです。

要素 命名例 補足
DTO名 User, Post, Thread エンティティ名と同一/単数形
フィールド username, email camelCaseが推奨
getter/setter getUsername(), setUsername(String username) 必須(JavaBeans仕様)

✅ Actionクラスとの連携(Struts2との接続点)

Struts2では、DTOをActionクラスのプロパティとして保持し、getter/setterを定義することで、自動的にJSPとのデータ連携が成立します。

public class UserEditAction extends ActionSupport {
    private User user;

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

    public String execute() {
        // 初期化、DB取得など
        return SUCCESS;
    }
}

この構造があることで、Struts2はOGNL(Object-Graph Navigation Language) を使って、JSPからこのDTOにアクセスできます。

※ OGNL(Object-Graph Navigation Language) とは、Struts2で使用される式言語で、
DTOなどのJavaBeansのプロパティにアクセスするための表現方法です。


✅ 📘 【重要】JSPからDTOにアクセスできる仕組みの正体!

たとえば、以下のようなJSPのコードを見たことがあるでしょう。

<s:textfield name="user.username" />

この意味は、次のように読み解けます:

  • 1.user → Actionクラスにある getUser() を呼び出して DTO を取得

  • 2.username → DTOの getUsername() / setUsername() にアクセス

✅ Struts2は、JSPのname="user.username"を 「Actionクラスにある User user の username プロパティにアクセスする」と解釈します。

つまり、ActionクラスにDTOをプロパティとして持ち、そのgetter/setterがあれば、Struts2は自動でバインドしてくれるのです!


✅ DTO設計の注意点とベストプラクティス

ポイント 内容
DTOにはロジックを入れない DTOは「データの器」専用。計算や処理はActionやServiceで行う。
フィールドは原則private 外部から直接アクセスさせず、getter/setterを通じて扱う。
フィールド名はcamelCase userId, postContentなどが一般的。
再利用を意識 ユーザ一覧、詳細、編集など共通化できるDTOは統一する。

✅ 次回予告

次回の Vol.10.2「DAOのインタフェース設計と実装パターン」 では、DTOと密接に連携するDAO層の設計について、以下を解説します。

  • DAOインタフェースと実装の分離(UserDao / UserDaoImpl

  • DAOの責務と粒度

  • DAO→DTOへのデータマッピングのベストプラクティス


✅ まとめ

項目 内容
DTOとは? データ輸送専用のJavaBeans(getter/setter付き)
Struts2との連携 Actionのプロパティ+getter/setterで成立
JSPからのアクセス OGNLにより user.usernamegetUser().getUsername() に変換される
設計方針 単機能・命名ルール遵守・ロジック非搭載が基本

📝 補足:DTOはStruts2の独自機能ではありません

DTO(Data Transfer Object)という用語は、Struts2固有の機能と思われがちですが、実際にはJavaの標準機能ではなく、「設計パターン」のひとつです。

✅ 正確な位置づけ

用語 説明
JavaBeans getter/setterとデフォルトコンストラクタを持つJavaの標準的なクラス仕様。Struts2に限らず広く使われます。
DTO JavaBeansを「データ輸送用オブジェクト」として利用するアーキテクチャ的な設計パターン。Struts2でも使われていますが、特定のフレームワーク専用ではありません。
Struts2のOGNL機能 DTOのプロパティを user.username のような式で参照・操作できるStruts2のバインディング機構。DTOの構造を理解していれば自然に使えます。

✅ 実務的な意味

つまり、Struts2はJavaBeansに準拠したDTOを介して、JSPとActionクラス間のデータをバインドしているという仕組みです。

// Actionクラス
public class UserEditAction extends ActionSupport {
    private User user; // ← DTO(JavaBeans)

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

    public String execute() {
        // DAOなどからuserを取得してJSPに渡す
        return SUCCESS;
    }
}

🎯 実装・設計に役立つ理解ポイント

✅ この補足を理解すると...

  • DTOの位置づけがはっきりする
  • Struts2がJavaBeansのgetter/setterをどう扱うかが分かる

「DTOとは何か」だけでなく、「なぜJSPからプロパティにアクセスできるのか?」という疑問も、これでスッキリ解消できたかと思います!


📘 この記事は、「Struts2 実務設計シリーズ Vol.10:DTO/DAO/JavaBeans編」の一部です。
Vol.10.2 ではさらに DAO 実装の詳細に踏み込んでいきます。どうぞお楽しみに!


✨ シリーズまとめ(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?