💃
【Golang】モデルの実装、メリット
モデルに関して某pomeさんから教わったことpart2です
モデル
ざっくりどんな実装
下記のような実装をする。
- バリデーション
- 状態判定
- 状態変更
- デフォルト値設定
モデルを導入するメリット
上記のような実装があることで、
- モデルさえあればどこでも同じ処理ができる状態にできる。
- コードのコピペを防ぐことができる。
- ユニットテストもモデルに対して書くことになるので書きやすくなる
具体的な実装
package domain
type User struct {
ID string
Name string
Status string
UpdatedAt time.Time
CreatedAt time.Time
}
func (u *User) ChangeState() {
//状態変更
u.Status = PREMIUM
updateAt = time.Now()
}
func (u * User) IsPremium() bool{
//状態判定
return u.Status === PREMIUM
}
func NewUserToCreate(name string) (*User error){
//バリデーション
if len(name) > NameMinLength{
return nil, error.New("user name validation error")
}
id, err := uuid.NewUUID()
if err != nil {
return nil, error.New("user id error")
}
//デフォルト値の設定
now := time.Now()
status := GENERAL
return &User{
ID: id.String(),
Name: title,
Status: status,
CreatedAt: now,
UpdatedAt: now,
},nil
}
モデルのNew関数は、デフォルト値がgetやupdateで変えたい場合があるので、それ専用のNew関数を作成する。
例: NewUserToCreate、NewUserToUpdateなど
Discussion