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
34
hey-techcamp-2022
garebareda
2
62
Rustで作った自作コマンド群の話
garebareda
0
150
自作Git作った話
garebareda
3
690
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
770
Vtuberをやりたくなりました
garebareda
1
74
Other Decks in Programming
See All in Programming
開発者フレンドリーで顧客も満足?Platformの秘密
algoartis
0
170
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
360
Road to RubyKaigi: Making Tinny Chiptunes with Ruby
makicamel
4
540
実践Webフロントパフォーマンスチューニング
cp20
45
10k
2025-04-25 GitHub Copilot Agent ライブデモ(スクリプト)
goataka
0
100
今話題のMCPサーバーをFastAPIでサッと作ってみた
yuukis
0
110
七輪ライブラリー: Claude AI で作る Next.js アプリ
suneo3476
1
170
読書シェア会 vol.4 『ダイナミックリチーミング 第2版』
kotaro666
0
110
Laravel × Clean Architecture
bumptakayuki
PRO
0
140
大LLM時代にこの先生きのこるには-ITエンジニア編
fumiyakume
8
3.3k
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
170
AI時代の開発者評価について
ayumuu
0
230
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
How to Ace a Technical Interview
jacobian
276
23k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Being A Developer After 40
akosma
91
590k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Building Applications with DynamoDB
mza
94
6.4k
Statistics for Hackers
jakevdp
798
220k
BBQ
matthewcrist
88
9.6k
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます