ActionFormとDTO

ActionFormとDTO

ActionFormとDTOのコードについてです。

ActionFormはstrutsが由来なので、画面仕様寄りのプロパティの型(例えば日付がString型だったり)になると思います。

それに対してDTOはDB寄りの仕様になるので日付はDate型、LongならDBはNumberなどとDB寄りになるのが自然です。

で、ActionFormからDTOへ移送するのがActionクラスに書かれていたりしますが、リファクタリングしていくとActionFormクラスに書くべきです。(依存度が高いので)

ActionFormに書くと、以下みたいなコードになると思います。

public DTO makeDto(){
  DTO dto = new DTO();
  dto.setXX(this.xx);// xxはActionFormのプロパティ
  dto.setXX(this.xx);
 
  return dto;
}

ちなみにDTOのプロパティ(特に数値型)はプリミティブ型は使うべきではありません。

BigDecimalを使うべきです。

これはJava仕様上、プリミティブ型は0で初期化されるからです。

以下、DTOの例です。

package com.confrage;

public class SampleDto {

  private String name;

  private int age;

  public String getName() {
    return name;
  }

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

  public int getAge() {
    return age;
  }

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

ageをint型で定義しています。

これをsetterを使わずにいきなりgetするとnullではなく0が返ってきます。プリミティブ型にnullは指定できません。

package com.confrage;

public class Test3{
  public static void main(String[] args) {
    SampleDto dto = new SampleDto();

    System.out.println(dto.getAge()); // プリミティブ型のため、nullではなく0で初期化される
  }
}

結果は意図しない0となります。

0

コメント

タイトルとURLをコピーしました