💃

【Golang】モデルの実装、メリット

2022/07/21に公開

モデルに関して某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