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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
garebare
June 17, 2022
Programming
0
150
クリーンアーキテクチャ を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
47
hey-techcamp-2022
garebareda
2
70
Rustで作った自作コマンド群の話
garebareda
0
170
自作Git作った話
garebareda
3
770
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
850
Vtuberをやりたくなりました
garebareda
1
79
Other Decks in Programming
See All in Programming
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
130
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
170
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
200
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
5
390
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
Windows on Ryzen and I
seosoft
0
230
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
1.2k
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
210
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
260
Docコメントで始める簡単ガードレール
keisukeikeda
1
110
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
550
NOT A HOTEL - 建築や人と融合し、自由を創り出すソフトウェア
not_a_hokuts
2
970
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
820
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Mind Mapping
helmedeiros
PRO
1
110
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
77
How to train your dragon (web standard)
notwaldorf
97
6.5k
Ruling the World: When Life Gets Gamed
codingconduct
0
170
Building Adaptive Systems
keathley
44
2.9k
The Limits of Empathy - UXLibs8
cassininazir
1
250
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.4k
Prompt Engineering for Job Search
mfonobong
0
180
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます