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
30
hey-techcamp-2022
garebareda
2
61
Rustで作った自作コマンド群の話
garebareda
0
150
自作Git作った話
garebareda
3
670
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
760
Vtuberをやりたくなりました
garebareda
1
72
Other Decks in Programming
See All in Programming
TCAを用いたAmebaのリアーキテクチャ
dazy
0
210
Swift Testingのモチベを上げたい
stoticdev
2
150
「個人開発マネタイズ大全」が教えてくれたこと
bani24884
1
270
Jasprが凄い話
hyshu
0
180
DevNexus - Create AI Infused Java Apps with LangChain4j
kdubois
0
120
iOSでQRコード生成奮闘記
ktcryomm
2
110
良いコードレビューとは
danimal141
7
2.2k
ML.NETで始める機械学習
ymd65536
0
240
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
240
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
160
コードを読んで理解するko build
bells17
1
110
Domain-Driven Design (Tutorial)
hschwentner
13
22k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
10
520
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
580
Unsuck your backbone
ammeep
669
57k
Designing for Performance
lara
605
68k
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます