Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
strategy of client side - DDD
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
to4iki
April 25, 2018
Programming
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
strategy of client side - DDD
to4iki
April 25, 2018
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
210
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.8k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.9k
ビューインプレッションの計測方法
to4iki
1
1.2k
秘伝の `gitconfig`
to4iki
1
480
Abema iOS Architecture
to4iki
12
3.6k
timetable-bot
to4iki
0
15k
BLoC Pattern Introduction with Swift
to4iki
2
1.4k
nel
to4iki
0
210
Other Decks in Programming
See All in Programming
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.4k
Railsバージョンを4倍にした話
optim
0
920
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
340
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
180
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
320
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
190
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
340
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
120
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
600
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
6.4k
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
450
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
960
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
600
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
The untapped power of vector embeddings
frankvandijk
2
2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
560
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
What's in a price? How to price your products and services
michaelherold
247
13k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Transcript
ઓུతClient-DDD iOSϥϯνษڧձ 2018/04/25 @to4iki 1
Agenda • DDDʹ͍ͭͯ(ઓུͷ؍Ͱͬ͟ͱઆ໌) • ΫϥΠΞϯταΠυͰ༗ޮͳͷ͔ߟ͑Δ • ·ͱΊ 2
DDD 3
DDD = ϨΠϠʔυΞʔΩςΫνϟͱ͍͏ೝࣝޡղΛੜ͡Δ DDDͷຊͷࢫຯ"ઓུ໘"ʹ͋Δ 4
υϝΠϯۦಈઃܭ Domain Driven Design 5
DDDͱ • υϝΠϯϞσϧΛத৺ʹߟ͑Δઃܭࢥ • DDDݴ༿Λେʹ͢Δઃܭࢥ • XP(ΠϯΫϦϝϯλϧͳઃܭ) + OO(ΦϒδΣΫτࢦ) •
OOP > DDD ݪճؼͳ͚ͩɻैདྷͷԆઢ্ʹ͋Δͷ 6
DDDͷత ιϑτΣΞͷ֩৺ʹ͋Δ ෳࡶੑͱઓ͏ࣄ 7
8
ۜͷؙͰͳ͍ • ΦϒδΣΫτࢦઃܭͷݪཧओٛΛओு͢Δઃܭख๏Ͱͳ ͍ɻ౷తͳ͍͔ͭ͘ͷߟ͑ํΛجʹɺڧௐ͢ΔΛͣΒͯ͠ ͍Δ • DDD͕͔ͳ͍໘ͪΖΜ͋Δ 9
DDDͷҙٛ1 • ϏδωεͷઐՈ(υϝΠϯΤΩεύʔτ)ͱ։ൃऀΛ ಉ͡ඨʹͤΔࣄ Ͱɺ։ൃऀͷࢹ͚ͩͰͳ͘Ϗδωεଆͷࢹ౿·͑ͨιϑτΣΞ Λ࡞ ΕΔΑ͏ʹ͢Δ • ͦͷιϑτΣΞͷ֓೦Λཧղ͍ͯ͠ΔͷҰ෦ͷਓ(͍͍ͨͯ։ൃऀ)ͨͪͩ ͚ͱ͍͏ঢ়گΛͳ͘͢
• υϝΠϯΤΩεύʔτͱ։ൃऀɺιϑτΣΞͦͷͷͱͷؒͰɺ௨༁Λෆ ཁͱ͢Δ 1 Θ͔ΔʂυϝΠϯۦಈઃܭ ʙͪͪ͜ΌΜͷେݥʙʲC91৽ץʳ 10
FYI: ͱ͔͔ͬΓʹ ઓུతDDDͷࢫຯ͕؆ܿʹॻ͔Ε͍ͯΔ 11
υϝΠϯͱʁ • ιϑτΣΞΛར༻͢Δਓͨͪͷ׆ ಈ"ͱ"ؔ৺ࣄ" • ιϑτΣΞͷ֩৺υϝΠϯʹؔ ͨ͠ΛϢʔβͷͨΊʹղܾ͢Δೳ ྗͰ͋Δ2 • ͍ΘΏΔۀྖҬ(ιϑτΣΞͰղܾ
͍ͨ͠) 2 ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ 12
ex. ϞϯελʔΛ͠ɺ Ϩϕϧ্͕͕ΔήʔϜͷυϝΠϯ(ۀྖҬ)Λߟ͑ͯΈΔ 13
ϞϯελʔϋϯλʔGO(Ծ)ͷυϝΠϯ • ϓϨΠϠʔϞϯελʔΛ͢ • Ϟϯελʔͷ࢟ARٕज़ʹΑͬͯΧϝϥʹөͬͨ෩ܠʹ߹͞ ΕΔ • Ϟϯελʔͷ࢟ݱ࣮ੈքʹଘࡏ͢Δ͔ͷΑ͏ʹݟ͑ɺྟײ ͕͋Δ 14
ϢϏΩλεݴޠ 15
͍ͭͰɾͲ͜Ͱɾ୭Ͱ ͑Δݴ༿ 16
ϢϏΩλεݴޠ 17
ϢϏΩλεݴޠ͕ແ͍ͱ • ϏδωεαΠυͱ։ൃऀͱͰಉ͡ࣄΛผʑʹݴ͍͍͑ͯͨΓ • ઐ༻ޠͷ௨༁ऀ͕ඞཁʹͳΔ • => ίετ͕ߴ͍ɺਖ਼֬ੑ͘͠ɺ͍ 18
ڞ௨ݴޠج൫Λͬͯ௨༁Λແ͘͢ ՈܭαʔϏεͷ߹ͷυϝΠϯͱͦΕҎ֎ - ⭕ Պຖͷຖ݄ͷ߹ܭֹۚΛूܭͰ͖Δ - ❌ ՈܭͷฤूཤྺΛHISTORYςʔϒϧʹอଘ͢Δ - ⭕
ֹཌ݄ʹ܁ΓӽͤΔ 19
ϢϏΩλεݴޠ͕ղܾ͢ΔྖҬ • ೝࣝͷࠩҟΛ͑ΔͨΊʹɺڞ௨ݴޠΛج൫ͱ͢Δɻ͜ͷݴޠ νʔϜͷ࡞ۀͷࢸΔॴʹଘࡏ͢Δ • Ұͷ௨༁Λෆཁ͠ɺυϝΠϯʹର͢ΔཧղΛΑΓεϜʔζͳ ͷʹ͢Δ • ཧϢʔβʔ͕͏ݴ༿(ex. χίχίͷੜओɺεϨओ)
20
͓·͚: ڥք͚ͮΒΕͨίϯςΩετ(BC) ΞΧϯτͬͯԿͰ͔͢ʁ Ϣʔβʔೝূͷ͜ͱΛࢦ͢ͷ͔ͳ 21
͓·͚: ڥք͚ͮΒΕͨίϯςΩετ(BC) • ݸਓͷه(ใࠂॻ)ͱͯ͠ͷΞΧϯτ(จֶίϯςΩετ) • ޱ࠲ͱͯ͠ͷΞΧϯτ(ۜߦίϯςΩετ) • BCͷҧ͍ʹΑΓϞσϧ(ϢϏΩλεݴޠͷҙຯ߹͍)͕ҟͳΔ 22
ϞϯελʔϋϯλʔGO(Ծ)ͷϢϏΩλεݴޠ • ϓϨΠϠʔ, ϋϯλʔ • ͢, ङΔ 23
ϞϯελʔϋϯλʔGO(Ծ)ͷυϝΠϯ࠶ߟ • ϋϯλʔϞϯελʔΛङΔ • Ϟϯελʔͷ࢟ݱ࣮ੈքʹଘࡏ͢Δ͔ͷΑ͏ʹݟ͑Δ 24
͜ͷݴ༿ͷ௨Γʹɺίʔυʹө͢Δ ϋϯλʔϞϯελʔΛङΔ ↓ ϋϯλʔ(Hunter)ϞσϧϞϯελʔ(Monstor) ΛङΔ(hunt)ͱ͍͏ৼΔ͍Λ࣋ͭ 25
υϝΠϯͷࣝৼΔ͍ΛநԽ ͨ͠ͷ͕υϝΠϯϞσϧ 26
υϝΠϯϞσϧ • ಛఆͷਤͰͳ͘ɺਤ͕͑Α͏ͱ͢ Δߟ͑ํΛࣔͨ͠ͷ 3 • ϞσϧϓϩδΣΫτʹܞΘΔਓʑͷ ಄ͷதͰߏங͞Εͨ֓೦ͷू·Γ 3 ࣮ફυϝΠϯۦಈઃܭ
27
͜͜·Ͱͷ·ͱΊ(খٳܜ) • DDD: υϝΠϯϞσϧΛத৺ʹߟ͑Δઃܭࢥ • υϝΠϯ: ৫͕ߦ͏ࣄۀʹΑͬͯղܾ͍ͨ͜͠ͱ = ۀ •
υϝΠϯϞσϧ: υϝΠϯͷࣝৼΔ͍ΛநԽͨ͠ͷ • ϢϏΩλεݴޠ: ͍ͭͰɾͲ͜Ͱɾ୭Ͱ͑Δݴ༿ 28
ຊ ͰɺΫϥΠΞϯταΠυͷ (υϝΠϯ)Ϟσϧʹ͍ͭͯߟ͑ͯΈΔ 29
ΫϥΠΞϯταΠυϓϩάϥϛϯάͷ ओతʁ 30
ΫϥΠΞϯταΠυϓϩάϥϛϯάͷ͍͠ 1. APIϨεϙϯεΛͲͷΑ͏ʹViewʹө͢Δ͔ 2. ෳࡶʹՄม͠͏Δσʔλͷঢ়ଶΛͲͷΑ͏ʹViewʹө͢Δ͔ 3. ཧతͳUI/UXΛͲͷΑ͏ʹViewʹө͢Δ͔(࣮ݱ͢Δ͔) 31
ΫϥΠΞϯτϓϩάϥϛϯάͷ͠͞ͷ8ׂͰ͋Γͭओతɺ ͲͷΑ͏ʹඳը͢Δ͔ (Viewʹө͢Δ͔)ͩͱࢥ͏ 32
͏Ұճ ΫϥΠΞϯταΠυͷϞσϧͬͯԿͩʁ 33
34
ΫϥΠΞϯταΠυͷϞσϧ(1/2) • ❌ APIͷϨεϙϯεΛϚοϐϯάͨ͠ܕ • ❌ APIͷϨεϙϯεΛඳըʹదͨ͠ܗࣜʹมͨ͠DTO • ⭕ αʔόαΠυ͕σʔλʹͳ͍ͬͯΔ߹ɺΫϥΠΞϯτ
ʹυϝΠϯϞσϧΛఆٛ͢Δ • ⭕ ΫϥΠΞϯτଆ͚ͩͰӬଓԽΛߦ͏߹ɺΫϥΠΞϯτʹ υϝΠϯϞσϧΛఆٛ͢Δ 35
ΫϥΠΞϯταΠυͷϞσϧ(2/2) • ! ෳࡶੑͷղܾͷͨΊʹΫϥΠΞϯτʹαʔόαΠυͷυϝΠ ϯϞσϧͷίϐʔ͕͍ͯྑ͍ʁ • ! αʔό͔Βड͚औͬͨσʔλΛϦϚοϓͯ͠ΫϥΠΞϯτଆ ʹओಋݖΛ࣋ͨͤΔઃܭͳΒυϝΠϯϞσϧΛΫϥΠΞϯτ͕ ࣮ͯ͠ྑ͍ʁ
36
! ෳࡶੑͷղܾͷͨΊʹΫϥΠΞϯτʹ(αʔόαΠυͷίϐʔͷ) υϝΠϯϞσϧ͕͍ͯྑ͍ʁ 37
(લఏ)֤αʔόαΠυͷίϯςΩετΛవΊͯѻ͏Ϋϥ ΠΞϯτ5 5 https://motida-japan.hatenablog.com/entry/2017/10/16/183508 38
υϝΠϯϞσϧΛ࣋ͬͯྑ͍߹(1/2) ίϯςΩετͷ౷߹ΛΫϥΠΞϯτͰߦ͏ 39
υϝΠϯϞσϧΛ࣋ͬͯྑ͍߹(2/2) ΦϑϥΠϯͰಈ͘͜ͱΛอূ͢Δ 40
υϝΠϯϞσϧΛ࣋ͨͳͯ͘ྑ͍߹ ΫϥΠΞϯτͰҰͭͷίϯςΩετ͔͠ѻΘͳ͍ 41
͜͜·Ͱͷ·ͱΊ • ΫϥΠΞϯτϓϩάϥϛϯάͲ͏ඳը͢Δ͔͕ओత • ΫϥΠΞϯταΠυͰͷυϝΠϯϞσϧɺඞཁʹͳΔέʔε έʔεόΠέʔε • ෳࡶͳ߹ = ෳͷίϯςΩετʹ·͕ͨΔΞϓϦέʔγϣϯ
Λ࡞Δ߹ɺΫϥΠΞϯτʹυϝΠϯϞσϧ͍ͯྑ͍(͍ Δ͖) 42
શମͷ·ͱΊ • Ϟσϧ(ۀ)φϚϞϊɺมԽ͢ΔͷͰߟ͑ҭͯͯߦ͘ͷ͕େࣄ • αʔόɾΫϥΠΞϯτؔͳ͕ࣗͨͪ͘ܞΘΔۀʹؔ৺Λ ࣋ͪऔΓΉ͜ͱͰɺΑΓྑ͍Ϟσϧ͕ੜ·ΕΔ 43
Thanks 44
SeeAlso • https://speakerdeck.com/j5ik2o/domeinqu-dong-she-ji-ji-chu- jiang-zuo-zhan-lue-bian • https://www.slideshare.net/hirokishigemura9/ruby-ddd • http://y-anz-m.blogspot.jp/2017/03/droidkaigi-2017_9.html • http://y-anz-m.blogspot.jp/2018/02/android.html
45