$30 off During Our Annual Pro Sale. View details »

クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ

クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ

6月17日に行われたNEWDEBUG!!!!で発表した史料です。
https://caspur.wintu.dev/front/lives/264

garebare

June 17, 2022
Tweet

More Decks by garebare

Other Decks in Programming

Transcript

  1. クリーンアーキテクチャを Goでする場合に不要な Interfaceは消しやがれ @garebare521

  2. By たふみ神

  3. ということで考えて行こうと思います

  4. クリーンアーキテクチャとは

  5. Entity UseCase Cotroller UI DB

  6. なんかこういうやつ!

  7. Interfaceで依存を逆転させてるらしい

  8. 実装例 type Hoge struct { … } type HogeUsecase struct

    { … } type HogeRepository struct { …. } type Hoge Controller struct { … }
  9. 実装例 hogeRepo:=NewHogeRepository() hogeUse :=NewHogeUsecase(hogeRepo) hogeCtrl := NewHogeCtroller(hogeUse)

  10. 実装例 hogeCtrl.Post () hogeUse.Post () HogeRepo.Insert()

  11. Interfaceなしだと モックが作れないので テストし難い

  12. Interface書くしかない

  13. クリーンアーキテクチャを Goでする場合に不要な Interfaceは消しやがれ

  14. じゃあどうするか

  15. とりあえず実装量が少なそうな UseCase層を取り除く

  16. Entity UseCase Cotroller UI DB

  17. Entity Cotroller UI DB

  18. 単純にインターフェースを削除すると テストが破綻する

  19. テストしやすい形にしたい

  20. じゃあもう実態持たせる必要なくない?

  21. Entity UI DB Controller

  22. Entity UI DB Controller こうしたい

  23. 実態を持たせずに Interfaceと同じようなことをしたい

  24. 関数を引数に渡せばよくね????

  25. 関数を渡すようにするとテストも書きやすい

  26. HogeController func (c *hogeCtrl) Post(c Context, insert func(hoge Hoge) (error))

    { insert() } hogeCtrl.Post(c, hogeRepo.insert)
  27. 関数の引数をInterface代わりにして 解決!

  28. ただ必要な関数が増えるたびに 引数も増えます