ActionFormとDTOのコードについてです。
ActionFormはstrutsが由来なので、画面仕様寄りのプロパティの型(例えば日付がString型だったり)になると思います。
それに対してDTOはDB寄りの仕様になるので日付はDate型、LongならDBはNumberなどとDB寄りになるのが自然です。
で、ActionFormからDTOへ移送するのがActionクラスに書かれていたりしますが、リファクタリングしていくとActionFormクラスに書くべきです。(依存度が高いので)
ActionFormに書くと、以下みたいなコードになると思います。
1 2 3 4 5 6 7 |
public DTO makeDto(){ DTO dto = new DTO(); dto.setXX(this.xx);// xxはActionFormのプロパティ dto.setXX(this.xx); return dto; } |
ちなみにDTOのプロパティ(特に数値型)はプリミティブ型は使うべきではありません。
BigDecimalを使うべきです。
これはJava仕様上、プリミティブ型は0で初期化されるからです。
以下、DTOの例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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は指定できません。
1 2 3 4 5 6 7 8 9 |
package com.confrage; public class Test3{ public static void main(String[] args) { SampleDto dto = new SampleDto(); System.out.println(dto.getAge()); // プリミティブ型のため、nullではなく0で初期化される } } |
結果は意図しない0となります。
1 |
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^