やりたいこと
ハンドラー⇒ユースケース⇒リポジトリのようなプロセスをクリーンアーキテクチャな作りにしてテストをしやすくします。
サンプル
あくまで例となりますので1ファイルに纏めております。
// main.go
package main
import "fmt"
// handlerパッケージに置くイメージ
type Handler struct {
uc UsecaseIF
}
type HandlerIF interface {
HandlerProcess()
}
func NewHandler(
uc UsecaseIF,
) HandlerIF {
return &Handler{uc: uc}
}
func (h *Handler) HandlerProcess() {
fmt.Println("Handler Process")
h.uc.UsecaseProcess()
}
// Usecaseパッケージに置くイメージ
type Usecase struct {
db DBIF
}
type UsecaseIF interface {
UsecaseProcess()
}
func NewUsecase(
db DBIF,
) UsecaseIF {
return &Usecase{db: db}
}
func (u *Usecase) UsecaseProcess() {
fmt.Println("Usecase Process")
u.db.DBProcess()
}
// DBパッケージに置くイメージ
type DB struct {
DBIInformation string
}
type DBIF interface {
DBProcess()
}
func NewDB(
di string,
) DBIF {
return &DB{DBIInformation: di}
}
func (d *DB) DBProcess() {
fmt.Println("DB Process")
fmt.Println(d.DBIInformation)
}
func main() {
// New
d := NewDB("DB情報一式")
u := NewUsecase(d)
h := NewHandler(u)
// 処理開始
h.HandlerProcess()
}
main実行結果
Handler Process
Usecase Process
DB Process
DB情報一式
ポイント
structのuc,dbをインターフェスにすることでモックに置き換えやすくしている。