Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
183
Help us understand the problem. What is going on with this article?
@mtanabe

【Java】formとentityとdtoの違いって?【Bean】

More than 3 years have passed since last update.

新人さん@Java研修中のソースコードレビューをしているときに、自分でもあやふやだったので調べてみました。

formとentityとdtoの違い

・・・見た目の違いはありません。
ホントに、マジで。使い方が違うだけで、中身は(ほぼ)変わりません。
3つともただのBeanです。
新人さん:beginner:は、formとentityとdtoは「使い道を示すBeanのニックネーム」だと思ってもらえれば、とりあえず:ok:かと思います。

Beanとは

だいたいこんな感じのクラスです。
いろんなプロパティがあって、そのプロパティに対するsetter/getterメソッドを持っています。

MemberBean.java
public class MemberBean {
    private String name;
    private int age;

    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

上記:arrow_up:の例では、クラス名を「MemberBean」としてますが、

  • formの場合:MemberForm
  • entityの場合:Member
  • dtoの場合:MemberDto

とかになることが多いと思います。

formの特徴

  • HTTPのPOSTメソッドで送信された値(=formタグの中身)が入っている。
  • なので、webサービス以外ではあまり使わないような気がする。
  • formタグの中身なのでBeanの名前もform・・・って覚えておけばいいと思う。
  • クラス名は「xxxForm」となることが多い。

entityの特徴

  • DBに登録・更新する値を入れておく。
  • DBから取得した値を保持しておく。
  • クラス名とテーブル名はたいてい同じになることが多い。

dtoの特徴

  • Data Transfer Objectの略がdto。
  • その名の通り、データ交換用のBean。
  • 新人研修レベルだと使わなくても十分・・・というか使う必要性が見当たらないことも多々ある?

データ交換とは、例えばformからentityへの変換をさします。
例えば、formでは年/月/日と入力を分割しているけど、DB上では生年月日をDate型で持っている場合、どこかのタイミングで結合する必要があります。
この場合、formやentityを直接編集すると、何かあった場合に元のデータに戻せなくなることがあります。
それを避けるために、一旦dtoに入れておく・・・という使い方をします。

まとめ

formとentityとdtoは3つともBean で、目的が異なるが故に名前が分けられているだけでした。
個人的には、新人研修レベルのプログラムだと、3つもBeanを使い分ける意義が見出しにくいと思います。
だけど、規模の大きなシステムを作っていこうとすると、目的に応じたBeanがシステム全体の(プログラムレベルでの)統制を取ってくれているのかなぁと感じてます。

183
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
mtanabe
画面系に抵抗感のないJavaエンジニア。最近はMySQLとも仲がいいです。 設計から実装、テスト、チームメンバーの成果物のレビューなどなど、幅広くやってます。
techfun
Tech FunはITの力で世界を豊かにする総合サービス企業です。 IT研修スクール「TechFun.jp(https://techfun.jp/)」、eラーニングプラットフォーム「StudySmile(https://studysmile.com/)」のほか、ミャンマーオフショア開発、スマートフォンアプリ開発、Webシステム開発、SIサービスを展開しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
183
Help us understand the problem. What is going on with this article?