0
0

More than 1 year has passed since last update.

Go言語クリーンアーキテクチャ例

Last updated at Posted at 2023-01-18

やりたいこと
ハンドラー⇒ユースケース⇒リポジトリのようなプロセスをクリーンアーキテクチャな作りにしてテストをしやすくします。

サンプル
あくまで例となりますので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をインターフェスにすることでモックに置き換えやすくしている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0