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製MVCアプリケーションのアーキテクチャを変更する
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
inari111
January 29, 2020
Programming
0
3k
Go製MVCアプリケーションのアーキテクチャを変更する
inari111
January 29, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
320
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1k
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
140
今更考える「単一責任原則」 / Thinking about the Single Responsibility Principle
tooppoo
3
1.6k
株式会社 Sun terras カンパニーデック
sunterras
0
2k
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
130
AHC061解説
shun_pi
0
350
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
2
540
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
130
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
1
230
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
350
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
650
Featured
See All Featured
A designer walks into a library…
pauljervisheath
210
24k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
250
How to build a perfect <img>
jonoalderson
1
5.2k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Documentation Writing (for coders)
carmenintech
77
5.3k
The Cult of Friendly URLs
andyhume
79
6.8k
Why Our Code Smells
bkeepers
PRO
340
58k
Accessibility Awareness
sabderemane
0
76
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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Λಋೖ͢Δ͜ͱ͕తͰͳ͍͕ɺ ΑΓ҆શͰϝϯς͍͢͠ίʔυΛࢦͨ݁͠Ռ
͜ΕΒΛऔΓೖΕ͍ͨͱࢥͬͨ ·ͱΊ