6月17日に行われたNEWDEBUG!!!!で発表した史料です。 https://caspur.wintu.dev/front/lives/264
クリーンアーキテクチャをGoでする場合に不要なInterfaceは消しやがれ@garebare521
View Slide
By たふみ神
ということで考えて行こうと思います
クリーンアーキテクチャとは
EntityUseCaseCotrollerUIDB
なんかこういうやつ!
Interfaceで依存を逆転させてるらしい
実装例type Hoge struct {…}type HogeUsecase struct {…}type HogeRepository struct {….}type Hoge Controller struct {…}
実装例hogeRepo:=NewHogeRepository()hogeUse :=NewHogeUsecase(hogeRepo)hogeCtrl := NewHogeCtroller(hogeUse)
実装例hogeCtrl.Post ()hogeUse.Post ()HogeRepo.Insert()
Interfaceなしだとモックが作れないのでテストし難い
Interface書くしかない
クリーンアーキテクチャをGoでする場合に不要なInterfaceは消しやがれ
じゃあどうするか
とりあえず実装量が少なそうなUseCase層を取り除く
EntityCotrollerUIDB
単純にインターフェースを削除するとテストが破綻する
テストしやすい形にしたい
じゃあもう実態持たせる必要なくない?
EntityUIDBController
EntityUIDBControllerこうしたい
実態を持たせずにInterfaceと同じようなことをしたい
関数を引数に渡せばよくね????
関数を渡すようにするとテストも書きやすい
HogeControllerfunc (c *hogeCtrl) Post(c Context, insert func(hoge Hoge) (error)) {insert()}hogeCtrl.Post(c, hogeRepo.insert)
関数の引数をInterface代わりにして解決!
ただ必要な関数が増えるたびに引数も増えます