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
MVVM
Search
Takuma Shimizu
June 24, 2023
Programming
0
51
MVVM
Takuma Shimizu
June 24, 2023
Tweet
Share
More Decks by Takuma Shimizu
See All by Takuma Shimizu
Swift Attributes
hokuron
0
440
Peek in Calendar implementation of swift-foundation
hokuron
0
200
Summon Rust from Swift
hokuron
0
680
Opaque Result Type in Swift with Rust
hokuron
0
160
Generalized accessors
hokuron
0
81
Ownership of Swift as seen from iteration and Rust
hokuron
1
690
Clean Architecture 3
hokuron
0
55
Clean Architecture 2
hokuron
0
70
Create MLで犬と猫の肉球を学習
hokuron
0
100
Other Decks in Programming
See All in Programming
MCPサーバー「モディフィウス」で変更容易性の向上をスケールする / modifius
minodriven
4
780
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
320
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
120
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
340
Kotlin 2.2が切り拓く: コンテキストパラメータで書く関数型DSLと新しい依存管理のかたち
knih
0
280
iOSでSVG画像を扱う
kishikawakatsumi
0
180
Module Proxyのマニアックな話 / Niche Topics in Module Proxy
kuro_kurorrr
0
1.3k
GC25 Recap: The Code You Reviewed is Not the Code You Built / #newt_gophercon_tour
mazrean
0
140
NIKKEI Tech Talk#38
cipepser
0
370
Bakuraku E2E Scenario Test System Architecture #bakuraku_qa_study
teyamagu
PRO
0
230
Dive into Triton Internals
appleparan
0
430
お前も Gemini CLI extensions を作らないか?
satohjohn
0
100
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Music & Morning Musume
bryan
46
6.9k
Optimizing for Happiness
mojombo
379
70k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Code Reviewing Like a Champion
maltzj
526
40k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
GraphQLとの向き合い方2022年版
quramy
49
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Transcript
MVVM
͜Ε͔ΒMVVMʹ͍ͭͯΘ͍Θ͍͢Δલʹ MVVM͕ੜΈग़͞ΕͨܦҢΛ͍ ͦΕ͕͠ಘͨ͜ͱΛΓ Έͳ͞ΜͷٞͷϕʔεΛͭ͘Γ͍ͨ
MVVMʹࢸΔ·Ͱ w 5.7& ݪॳ.7$ w .7$ w .7$ "QQMJDBUJPO.PEFM
w ݪॳ.71 w .71 w .7$ 1SFTFOUBUJPO.PEFM w.77. w .717. w ʜ Cocoa MVCग़ͯ͜ͳ͍Αʂ 👉
TMVE (ݪॳMVC) w ϓϨθϯςʔγϣϯ (6*දݱ ͱϞσϧ σʔλͱͦͷৼΔ͍ ͷ w ύλʔϯԽ͞Εͨ.7$ͱޙଓͷύλʔϯ
(6*ΞʔΩςΫνϟʔ ʹڧ͘Ө ڹΛ༩͑ͨ
MVC͕͠ಘͨ͜ͱ w ϓϨθϯςʔγϣϯͱϞσϧͷΛ͞Βʹൃల w 0CTFSWFSύλʔϯʹΑΔσʔλͷಉظํ๏Λཱ֬
MVC͕ͨ͠՝ w 7JFXͷϩδοΫͱঢ়ଶͷஔ͖ॴ͕ෆ໌ྎ w ࣌ͷ(6*୯७Ͱݱ΄ͲϦονͰͳ͔ͬͨͨΊɺେ͖ͳʹ ͳΒͳ͔ͬͨ w ˠ"QQMJDBUJPO.PEFM
MVC + Application Model • View - ModelؒͰͷతͳมߋͷࢹɾ௨͔Β • View
- Application Model - ModelʹΑΔؒతͳࢹɾ௨ • Application ModelModelͱͯ͠ͷଆ໘͕ڧ͍ • View - Modelؒͷσʔλͷදݱมߦ͏ • → ViewͷϩδοΫͱঢ়ଶͷஔ͖ॴͱͯ͠ػೳ
Application Modelͷ՝ • Observerύλʔϯ͕ద༻Ͱ͖ΔͷɺModelʹଘࡏ͢ΔσʔλͷΈ • Viewಠࣗͷঢ়ଶɺObserverύλʔϯʹΑΔࢹɾ௨Λద༻Ͱ͖ͳ͍ • ModelతͳଘࡏͰ͋ΔApplication Model͕ViewΛ͍͡Δ͜ͱʹ… •
ྫɿview.textField.textColor = .red Λ࣮ߦ͢ΔΑ͏ͳͷ • ObserverύλʔϯʹΑΔ੍ΛಀΕɺApplication Model͕ංେԽ
ݪॳMVP • MVCͷਖ਼౷ਐԽͷงғؾ • ݱͷMVPͱҟͳΔඇৗʹڵຯਂ͍ߏ • Application Modelͷ՝ղܾͱ͋·Γؔͳ͍ͷͰׂѪ • વɺݱͷMVPʹେ͖ͳӨڹΛ༩͍͑ͯΔ
MVP • MVVMͱฒΜͰApplication Modelͷ՝Λղܾͨ͠Ұͭͷύλʔϯ • MVVMʹӨڹΛ༩͑ͨΘ͚Ͱͳͦ͞͏ͳͷͰׂѪ
MVP • View - Modelؒͷࢹɾ௨ͷ͕ؔ෮׆ • ࣌Passive Viewͷ֓೦ͳ͔ͬͨͱࢥΘΕΔ • Application
Model͔ΒModelدΓͷཁૉ͕ෆཁʹ • → Application Model͔ΒObserverύλʔϯͷద༻͕ͳ͘ͳΓPresenter ͱมԽ • PresenterɺViewϩδοΫͱঢ়ଶཧʹઐ೦Ͱ͖ΔΑ͏ʹͳΓɺViewͱ ͷ࿈ܞ͕ີʹऔΕΔΑ͏ʹͳͬͨ
MVPͷิ • ControllerͷׂViewʹٵऩ • MVC͕ߟҊ͞Εͨ࣌ɺϢʔβʔೖྗϨϕϧͳσʔλදݱͰ͋ ΓɺController͕ҙຯͷ͋ΔΞΫγϣϯʹม͢Δඞཁ͕͋ͬͨ • iOSͰྫ͑ΔͱɺUIPanGestureRecognizerͷΠϕϯτΛࡹ͘Α͏ͳ ͷʁ •
·ͨɺϨεϙϯμʔνΣʔϯͷࢧԉ͕ͳ͍ঢ়ଶʁ
• ViewͷϩδοΫͱঢ়ଶΛอ࣋͢ΔϞσϧ • Application ModelͱҟͳΓɺViewอ࣋ͨ͠Γߋ৽ͨ͠Γ͠ͳ͍ • Model(υϝΠϯϨΠϠʔ)ͱΓͱΓΛߦ͏ • ViewͷมԽ͠͏Δશঢ়ଶΛอ࣋͠ɺData BindingΛ௨ͯ͡ಉظ͢Δ
• Data Binding۩ମతͳݴٴ͋·Γ͞Ε͍ͯͳ͍ • which I'm hoping will happen some day with technologies like .NET's data binding. Presentation Model
Presentation Model͕͠ಘͨ͜ͱ w 0CTFSWFSύλʔϯʹΑΔ7JFX.PEFMؒͷͭͳ͕ΓΛઈͬͨ w "QQMJDBUJPO.PEFM͔Β0CTFSWFSύλʔϯͷద༻͕ͳ͘ͳΓɺ %BUB#JOEJOHΛ༻͍Δ7JFX.PEFMͱมԽ w "QQMJDBUJPO.PEFMͷஔ͖͕͑ओత
MVVM w 1SFTFOUBUJPO.PEFMΛΑΓ۩ݱԽͨ͠ύλʔϯ w 7JFX.PEFMɺ w 6*ύʔπΛ࠶ར༻͢ΔͨΊͷ7JFXͷநදݱ w %BUB#JOEJOHΛ௨ͯ͡7JFX͔Βར༻͞ΕΔઐ༻ͷ.PEFM ํ
w .PEFMͷσʔλΛ7JFX༻ʹม w 7JFX͕.PEFMͱؒతʹΓͱΓ͢Δ$PNNBOEΛඋ͑Δ
MVVM͕ͨ͠՝ w 81'Λલఏͱ͍ͯ͠ΔͨΊɺ%BUB#JOEJOHʹؔ͢Δݴٴ͕9".-͚ͩͳ Ͳݶఆత w .JDSPTPGUͷதͷਓ͕ߟҊͨ͠ύλʔϯͳͷͰવͱ͍͑વ
MVVMͷิ • Viewͷ։ൃɺσβΠφʔͷͰߦ͏ • UIͷϏδϡΞϧ໘͕ԡ͠ग़͞Ε࢝Ίͨ࣌എܠ͕͔ؔ • ControllerͷׂViewʹٵऩ • MVC͕ߟҊ͞Εͨ࣌ɺϢʔβʔೖྗϨϕϧͳσʔλදݱͰ͋Γɺ Controller͕ҙຯͷ͋ΔΞΫγϣϯʹม͢Δඞཁ͕͋ͬͨ
• iOSͰྫ͑ΔͱɺUIPanGestureRecognizerͷΠϕϯτΛࡹ͘Α͏ͳͷʁ • ·ͨɺϨεϙϯμʔνΣʔϯͷࢧԉ͕ͳ͍ঢ়ଶʁ
·ͱΊ w .7$ʮϓϨθϯςʔγϣϯͱϞσϧͷʯ w "QQMJDBUJPO.PEFMʮ7JFXͷϩδοΫͱঢ়ଶͷஔ͖ॴʯ w 1SFTFOUBUJPO.PEFMʮ%BUB#JOEJOHͷख๏ʯ w .77.ʮ1SFTFOUBUJPO.PEFMΛൃలɺύλʔϯԽʯ w
ʮ7JFXͷϩδοΫͱঢ়ଶͷஔ͖ॴʯΛΊ͙Δྺ࢙ w ಉظํ๏ͱͯ͠%BUB#JOEJOHΛݟग़ͨ͠