Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
クリーンアーキテクチャを Goでする場合に不要な Interfaceは消しやがれ @garebare521
Slide 2
Slide 2 text
By たふみ神
Slide 3
Slide 3 text
ということで考えて行こうと思います
Slide 4
Slide 4 text
クリーンアーキテクチャとは
Slide 5
Slide 5 text
Entity UseCase Cotroller UI DB
Slide 6
Slide 6 text
なんかこういうやつ!
Slide 7
Slide 7 text
Interfaceで依存を逆転させてるらしい
Slide 8
Slide 8 text
実装例 type Hoge struct { … } type HogeUsecase struct { … } type HogeRepository struct { …. } type Hoge Controller struct { … }
Slide 9
Slide 9 text
実装例 hogeRepo:=NewHogeRepository() hogeUse :=NewHogeUsecase(hogeRepo) hogeCtrl := NewHogeCtroller(hogeUse)
Slide 10
Slide 10 text
実装例 hogeCtrl.Post () hogeUse.Post () HogeRepo.Insert()
Slide 11
Slide 11 text
Interfaceなしだと モックが作れないので テストし難い
Slide 12
Slide 12 text
Interface書くしかない
Slide 13
Slide 13 text
クリーンアーキテクチャを Goでする場合に不要な Interfaceは消しやがれ
Slide 14
Slide 14 text
じゃあどうするか
Slide 15
Slide 15 text
とりあえず実装量が少なそうな UseCase層を取り除く
Slide 16
Slide 16 text
Entity UseCase Cotroller UI DB
Slide 17
Slide 17 text
Entity Cotroller UI DB
Slide 18
Slide 18 text
単純にインターフェースを削除すると テストが破綻する
Slide 19
Slide 19 text
テストしやすい形にしたい
Slide 20
Slide 20 text
じゃあもう実態持たせる必要なくない?
Slide 21
Slide 21 text
Entity UI DB Controller
Slide 22
Slide 22 text
Entity UI DB Controller こうしたい
Slide 23
Slide 23 text
実態を持たせずに Interfaceと同じようなことをしたい
Slide 24
Slide 24 text
関数を引数に渡せばよくね????
Slide 25
Slide 25 text
関数を渡すようにするとテストも書きやすい
Slide 26
Slide 26 text
HogeController func (c *hogeCtrl) Post(c Context, insert func(hoge Hoge) (error)) { insert() } hogeCtrl.Post(c, hogeRepo.insert)
Slide 27
Slide 27 text
関数の引数をInterface代わりにして 解決!
Slide 28
Slide 28 text
ただ必要な関数が増えるたびに 引数も増えます