新人さん@Java研修中のソースコードレビューをしているときに、自分でもあやふやだったので調べてみました。
formとentityとdtoの違い
・・・見た目の違いはありません。
ホントに、マジで。使い方が違うだけで、中身は(ほぼ)変わりません。
3つともただのBeanです。
新人さんは、formとentityとdtoは「使い道を示すBeanのニックネーム」だと思ってもらえれば、とりあえずかと思います。
Beanとは
だいたいこんな感じのクラスです。
いろんなプロパティがあって、そのプロパティに対するsetter/getterメソッドを持っています。
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;
}
}
上記の例では、クラス名を「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がシステム全体の(プログラムレベルでの)統制を取ってくれているのかなぁと感じてます。