LoginSignup
282
271

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-01

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

282
271
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
282
271