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
61
0
Share
MVVM
Takuma Shimizu
June 24, 2023
More Decks by Takuma Shimizu
See All by Takuma Shimizu
RailsのValidatesをSwift Macrosで再現してみた
hokuron
0
140
Swift Attributes
hokuron
0
460
Peek in Calendar implementation of swift-foundation
hokuron
0
230
Summon Rust from Swift
hokuron
0
710
Opaque Result Type in Swift with Rust
hokuron
0
180
Generalized accessors
hokuron
0
88
Ownership of Swift as seen from iteration and Rust
hokuron
1
720
Clean Architecture 3
hokuron
0
69
Clean Architecture 2
hokuron
0
86
Other Decks in Programming
See All in Programming
「速くなった気がする」をデータで疑う
senleaf24
0
110
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
210
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
270
安いハードウェアでVulkan
fadis
1
850
存在論的プログラミング: 時間と存在を記述する
koriym
5
680
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
200
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
130
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
310
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
130
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
260
AI 開発合宿を通して得た学び
niftycorp
PRO
0
180
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
730
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
96
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
180
Game over? The fight for quality and originality in the time of robots
wayneb77
1
150
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
sira's awesome portfolio website redesign presentation
elsirapls
0
200
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
470
A Modern Web Designer's Workflow
chriscoyier
698
190k
First, design no harm
axbom
PRO
2
1.2k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.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Λݟग़ͨ͠