$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go製MVCアプリケーションのアーキテクチャを変更する
Search
inari111
January 29, 2020
Programming
0
2.9k
Go製MVCアプリケーションのアーキテクチャを変更する
inari111
January 29, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
140
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
190
AIコーディングエージェント(Manus)
kondai24
0
130
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
25
21k
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.3k
Microservices rules: What good looks like
cer
PRO
0
600
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
500
[SF Ruby Conf 2025] Rails X
palkan
0
450
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
150
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
160
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
150
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Music & Morning Musume
bryan
46
7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Code Reviewing Like a Champion
maltzj
527
40k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
Faster Mobile Websites
deanohume
310
31k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Transcript
GoMVCΞϓϦέʔγϣϯͷ ΞʔΩςΫνϟΛมߋ͢Δ 2020.01.29 howtv.go - @inari111
• ܊ ࠸ • Twitter: @inari111 • GitHub: @inari111 •
Go / Layered Architecture / Protocol buffers • 2019.04~ hey (Coiney) • πέ͍ ࣗݾհ
None
ి൪߸Λೖྗ SMSૹ৴ λοϓͯ͠ಉҙͰ πέ͍ྃ 2ϲ݄ҎʹίϯϏχͰࢧ͍
• ࠓͷπέ͍ͷΞʔΩςΫνϟ • ࠓͷΞʔΩςΫνϟͷ • ৽͍͠ΞʔΩςΫνϟ(Ծ) ࠓ͢͜ͱ
ϑϨʔϜϫʔΫrevelΛ༻ app ᵓᴷᴷ client ᵓᴷᴷ controllers ᵓᴷᴷ library ᵓᴷᴷ models
ᵓᴷᴷ routes ᵓᴷᴷ services ᵋᴷᴷ views ࠓͷΞʔΩςΫνϟ $POUSPMMFS 4FSWJDF .PEFM .PEFMͷؔݺͼग़͠ $MJFOU 4.4ૹ৴ ֎෦"1* ϏδωεϩδοΫ ӬଓԽॲཧ
•ModelԼ͕ؔʹͳ͍ͬͯΔՕॴ͕ଟ͍ • ໊͕ؔ͘ͳͬͯ͠·͏ • GetConsumerByPhoneNumber, UpdateSettlementToXXX… • ؔͳͷͰͲͷService͔ΒͰݺͼग़ͤͯ͠·͏ • mockԽ͕εϚʔτʹͰ͖ͳ͍
•Modelͷίʔυ͕ଟ͘ͳ͖ͬͯͨ •Model͕domaininfraͷׂΛ୲͍ͬͯΔ •ӬଓԽͷॲཧͱυϝΠϯϩδοΫ͕Ͱ͖͍ͯͳ͍
•ίʔυྔ͕૿͖͑ͯͯɺϝϯςͮ͠Β͍Օॴ͕ग़͖ͯͨ •υϝΠϯϩδοΫͱӬଓԽॲཧΛ͚Δ͜ͱͰؔ৺ࣄͷ Λߦ͍͍ͨ ͳͥΞʔΩςΫνϟΛมߋ͍ͨ͠ͷ͔
৽͍͠ ΞʔΩςΫνϟ(Ծ) $POUSPMMFS %PNBJO 4FSWJDF .PEFM 3FQPTJUPSZݺͼग़͠ $MJFOU 4.4ૹ৴ ֎෦"1*
ϏδωεϩδοΫ 3FQPTJUPSZ*OUFSGBDF %#Ϟσϧ 3FQPTJUPSZ࣮ 2VFSZ4FSWJDF*OUFSGBDF 2VFSZ4FSWJDF࣮ ࢀরܥϞσϧ υϝΠϯϞσϧ
• υϝΠϯϞσϧ • ϏδωεϩδοΫ • Repositoryͷinterface Domain $POUSPMMFS %PNBJO 4FSWJDF
.PEFM 3FQPTJUPSZݺͼग़͠ ϏδωεϩδοΫ 3FQPTJUPSZ*OUFSGBDF %#Ϟσϧ 3FQPTJUPSZ࣮ 2VFSZ4FSWJDF*OUFSGBDF 2VFSZ4FSWJDF࣮ ࢀরܥϞσϧ υϝΠϯϞσϧ
domain/consumer/repository.go
services/consumer.go
• DBϞσϧ • Repositoryͷ࣮ • υϝΠϯϞσϧ 㲗 DBϞσϧ • Query
Serviceͷ࣮ Model $POUSPMMFS %PNBJO 4FSWJDF .PEFM 3FQPTJUPSZݺͼग़͠ ϏδωεϩδοΫ 3FQPTJUPSZ*OUFSGBDF %#Ϟσϧ 3FQPTJUPSZ࣮ 2VFSZ4FSWJDF*OUFSGBDF 2VFSZ4FSWJDF࣮ ࢀরܥϞσϧ υϝΠϯϞσϧ
• ෳूʹ·͕ͨΔσʔλΛऔಘ ͢ΔͨΊʹಋೖ • ServiceʹࢀরܥϞσϧɺ interfaceΛఆٛ • interfaceͷ࣮Modelʹஔ͘ Query Service
$POUSPMMFS %PNBJO 4FSWJDF .PEFM 3FQPTJUPSZݺͼग़͠ ϏδωεϩδοΫ 3FQPTJUPSZ*OUFSGBDF %#Ϟσϧ 3FQPTJUPSZ࣮ 2VFSZ4FSWJDF*OUFSGBDF 2VFSZ4FSWJDF࣮ ࢀরܥϞσϧ υϝΠϯϞσϧ
• ৽نػೳՃΛࢭΊͣʹ͍͍ײ͡ʹϦϑΝΫλΛਐΊ͍ͯ͘ʹ • ෳRepositoryʹ·͕ͨΔτϥϯβΫγϣϯ • ServiceͰτϥϯβΫγϣϯுΔ͔͠ͳ͍…ʁ • ίʔυྔ͕૿͑ͯ͘ΔͱMVCͩͱͭΒ͍…ͱࢥ͏ Έ
• RepositoryͷಋೖʹΑΓӬଓԽॲཧͱυϝΠϯϩδοΫ ͷΛߦ͏͜ͱʹͨ͠ • Query ServiceΛ࡞ͯ͠ෳूʹ·͕ͨΔσʔλΛ औಘ͢Δ͜ͱʹͨ͠ • DDDCQRSΛಋೖ͢Δ͜ͱ͕తͰͳ͍͕ɺ ΑΓ҆શͰϝϯς͍͢͠ίʔυΛࢦͨ݁͠Ռ
͜ΕΒΛऔΓೖΕ͍ͨͱࢥͬͨ ·ͱΊ