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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
49
hey-techcamp-2022
garebareda
2
71
Rustで作った自作コマンド群の話
garebareda
0
170
自作Git作った話
garebareda
3
770
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
860
Vtuberをやりたくなりました
garebareda
1
80
Other Decks in Programming
See All in Programming
Claude Codeログ基盤の構築
giginet
PRO
7
3.8k
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
180
AI-DLC 入門 〜AIコーディングの本質は「コード」ではなく「構造」〜 / Introduction to AI-DLC: The Essence of AI Coding Is Not “Code” but “Structure”
seike460
PRO
0
130
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
160
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
1.4k
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
200
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
210
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
380
飯MCP
yusukebe
0
440
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
5.1k
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
450
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
150
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
170
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
500
Faster Mobile Websites
deanohume
310
31k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
240
Making the Leap to Tech Lead
cromwellryan
135
9.8k
The untapped power of vector embeddings
frankvandijk
2
1.6k
Automating Front-end Workflow
addyosmani
1370
200k
New Earth Scene 8
popppiees
2
1.9k
A designer walks into a library…
pauljervisheath
210
24k
The Spectacular Lies of Maps
axbom
PRO
1
660
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます