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
54
hey-techcamp-2022
garebareda
2
77
Rustで作った自作コマンド群の話
garebareda
0
180
自作Git作った話
garebareda
3
790
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
870
Vtuberをやりたくなりました
garebareda
1
86
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
140
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
110
Oxlintのカスタムルールの現況
syumai
5
930
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
140
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
430
OSもどきOS
arkw
0
370
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
220
Inside Stream API
skrb
1
490
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
7
2.9k
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
2
1.1k
net-httpのHTTP/2対応について
naruse
0
400
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
A Tale of Four Properties
chriscoyier
163
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
Raft: Consensus for Rubyists
vanstee
141
7.5k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
130
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
210
It's Worth the Effort
3n
188
29k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
370
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代わりにして 解決!
ただ必要な関数が増えるたびに 引数も増えます