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
130
strategy of client side - DDD
to4iki
April 25, 2018
Tweet
Share
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
87
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.3k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
4.8k
ビューインプレッションの計測方法
to4iki
1
1.1k
秘伝の `gitconfig`
to4iki
1
450
Abema iOS Architecture
to4iki
12
3.4k
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
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
250
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
2
12k
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
200
効率的な開発手段として VRTを活用する
ishkawa
0
160
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
880
Rails Frontend Evolution: It Was a Setup All Along
skryukov
0
280
The Niche of CDK Grant オブジェクトって何者?/the-niche-of-cdk-what-isgrant-object
hassaku63
1
610
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
9
3k
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1.1k
GPUを計算資源として使おう!
primenumber
1
250
PicoRuby on Rails
makicamel
2
140
코딩 에이전트 체크리스트: Claude Code ver.
nacyot
0
930
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.7k
Navigating Team Friction
lara
187
15k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
We Have a Design System, Now What?
morganepeng
53
7.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Bash Introduction
62gerente
613
210k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
What's in a price? How to price your products and services
michaelherold
246
12k
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