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
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
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
230
株式会社 Sun terras カンパニーデック
sunterras
0
2k
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
190
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
210
文字コードの話
qnighy
44
17k
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
470
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
120
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
210
Codex の「自走力」を高める
yorifuji
0
1.1k
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
110
TipKitTips
ktcryomm
0
160
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
350
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.8k
The agentic SEO stack - context over prompts
schlessera
0
690
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
150
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
230
A Soul's Torment
seathinner
5
2.4k
Scaling GitHub
holman
464
140k
Writing Fast Ruby
sferik
630
63k
Into the Great Unknown - MozCon
thekraken
40
2.3k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
230
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます