Help us understand the problem. What is going on with this article?

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

More than 1 year has 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がシステム全体の(プログラムレベルでの)統制を取ってくれているのかなぁと感じてます。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした