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
strategy of client side - DDD
Search
to4iki
April 25, 2018
Programming
0
140
strategy of client side - DDD
to4iki
April 25, 2018
Tweet
Share
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
110
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.4k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5k
ビューインプレッションの計測方法
to4iki
1
1.1k
秘伝の `gitconfig`
to4iki
1
450
Abema iOS Architecture
to4iki
12
3.5k
timetable-bot
to4iki
0
14k
BLoC Pattern Introduction with Swift
to4iki
2
1.3k
nel
to4iki
0
160
Other Decks in Programming
See All in Programming
CSC509 Lecture 04
javiergs
PRO
0
300
Software Architecture
hschwentner
6
2.3k
オープンソースソフトウェアへの解像度🔬
utam0k
16
3.1k
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
15
6.1k
CSC305 Lecture 06
javiergs
PRO
0
250
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
520
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.3k
Catch Up: Go Style Guide Update
andpad
0
230
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
310
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
300
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
11
6.9k
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
200
Featured
See All Featured
Writing Fast Ruby
sferik
629
62k
The Pragmatic Product Professional
lauravandoore
36
6.9k
KATA
mclloyd
PRO
32
15k
Gamification - CAS2011
davidbonilla
81
5.5k
Designing Experiences People Love
moore
142
24k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
980
Building Adaptive Systems
keathley
44
2.8k
Six Lessons from altMBA
skipperchong
29
4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
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