Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
Search
garebare
June 17, 2022
Programming
0
120
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
6月17日に行われたNEWDEBUG!!!!で発表した史料です。
https://caspur.wintu.dev/front/lives/264
garebare
June 17, 2022
Tweet
Share
More Decks by garebare
See All by garebare
ペンギンをおすすめする
garebareda
0
29
hey-techcamp-2022
garebareda
2
59
Rustで作った自作コマンド群の話
garebareda
0
150
自作Git作った話
garebareda
3
670
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
750
Vtuberをやりたくなりました
garebareda
1
69
Other Decks in Programming
See All in Programming
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
Domain-Driven Transformation
hschwentner
2
1.9k
Pulsar2 を雰囲気で使ってみよう
anoken
0
240
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
49
17k
CI改善もDatadogとともに
taumu
0
120
技術を根付かせる / How to make technology take root
kubode
1
250
チームリードになって変わったこと
isaka1022
0
200
楽しく向き合う例外対応
okutsu
0
150
Linux && Docker 研修/Linux && Docker training
forrep
24
4.5k
DROBEの生成AI活用事例 with AWS
ippey
0
130
SwiftUI Viewの責務分離
elmetal
PRO
1
240
Spring gRPC について / About Spring gRPC
mackey0225
0
220
Featured
See All Featured
Designing for Performance
lara
604
68k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
For a Future-Friendly Web
brad_frost
176
9.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Thoughts on Productivity
jonyablonski
69
4.5k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Building Your Own Lightsaber
phodgson
104
6.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Site-Speed That Sticks
csswizardry
4
380
Building a Scalable Design System with Sketch
lauravandoore
461
33k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
550
Transcript
クリーンアーキテクチャを Goでする場合に不要な Interfaceは消しやがれ @garebare521
By たふみ神
ということで考えて行こうと思います
クリーンアーキテクチャとは
Entity UseCase Cotroller UI DB
なんかこういうやつ!
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層を取り除く
Entity UseCase Cotroller UI DB
Entity Cotroller UI DB
単純にインターフェースを削除すると テストが破綻する
テストしやすい形にしたい
じゃあもう実態持たせる必要なくない?
Entity UI DB Controller
Entity UI DB Controller こうしたい
実態を持たせずに Interfaceと同じようなことをしたい
関数を引数に渡せばよくね????
関数を渡すようにするとテストも書きやすい
HogeController func (c *hogeCtrl) Post(c Context, insert func(hoge Hoge) (error))
{ insert() } hogeCtrl.Post(c, hogeRepo.insert)
関数の引数をInterface代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます