Java
初心者
Java入門
新人プログラマ応援

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