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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
garebare
June 17, 2022
Programming
150
0
Share
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
6月17日に行われたNEWDEBUG!!!!で発表した史料です。
https://caspur.wintu.dev/front/lives/264
garebare
June 17, 2022
More Decks by garebare
See All by garebare
ペンギンをおすすめする
garebareda
0
53
hey-techcamp-2022
garebareda
2
75
Rustで作った自作コマンド群の話
garebareda
0
170
自作Git作った話
garebareda
3
780
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
870
Vtuberをやりたくなりました
garebareda
1
81
Other Decks in Programming
See All in Programming
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
5
1.6k
GoogleCloudとterraform完全に理解した
terisuke
1
190
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
260
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
320
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
220
Agent Skills を社内で育てる仕組み作り
jackchuka
1
1.6k
t *testing.T は どこからやってくるの?
otakakot
1
920
【26新卒研修】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
140
[RubyKaigi 2026] Require Hooks
palkan
1
300
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
1.6k
My daily life on Ruby
a_matsuda
3
190
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
390
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
630
Six Lessons from altMBA
skipperchong
29
4.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Color Theory Basics | Prateek | Gurzu
gurzu
0
310
Marketing to machines
jonoalderson
1
5.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
Context Engineering - Making Every Token Count
addyosmani
9
870
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.9k
We Have a Design System, Now What?
morganepeng
55
8.1k
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます