2020-05-18 中村
Spring Bootのレイヤ間でやりとりされるJava Beans (POJO)の呼び方.
ざっくり言えば以下の通りか.
PitCoin(拡張版)を例にとって説明してみる.
データベースのテーブルをそのままミラーリングしたJavaオブジェクト.
メンバにアノテーションしておくと,CRUDする際にあんじょう変換&検査してくれる.
@Data
@Entity
public class User {
@Id
String uid; //ユーザID
@NotEmpty
String name; //ユーザ氏名
@NotEmpty
String password; //パスワード
@NotEmpty
String email; //Email
boolean admin; //管理者かどうか
boolean enabled; //有効かどうか
@Temporal(TemporalType.TIMESTAMP)
Date enabledAt; //有効になった日時
@Temporal(TemporalType.TIMESTAMP)
Date disabledAt; //凍結された日時
String remark; //注釈
}
様々なEntityやFormから必要なデータを集めて詰め込んで,受け渡ししやすい形にしたオブジェクト.
業務ロジックに応じて作られる.FormもDTOの一種といってよいかもしれないがDTOはフォームに限らない.
//ユーザの口座照会用 DTO
@Data
public class UserAccountDTO {
String uid; //ユーザID
String name; //ユーザ氏名
int aid; //口座番号
int coin; //口座残高
List <Record> records; // 取引履歴
}
Viewから受け取るユーザの入力フォームを保持するJavaオブジェクト. @Controllerのメソッドの引数(@RequestBody)として受取り,バリデーション(@Validated)される.
一般的にメンバはすべてString.バリデーションのためのアノテーションが施される.
入力に特化したDTOとも考えられるが,数値変換する前の数字文字列や,暗号化前のパスワード等, ユーザの入力そのものを(エラー等に備えて)保持しておくために,FormとDTOは別で作ったほうが 良いらしい.
@Data
public class UserForm {
/* ユーザID は 最大16文字.英数字,アンダーバー,ハイフンのみ許す */
@Size(max = 16)
@Pattern(regexp = "[0-9a-zA-Z_\\-]+")
private String uid;
/* 名前,パスワードは Null,空文字(""),空白のみでないことを検証*/
@NotBlank
private String name;
@NotBlank
private String password;
/* RFC2822に準拠したEmailアドレスかどうか検証する */
@Email
private String email;
}