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
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
200
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.8k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.9k
ビューインプレッションの計測方法
to4iki
1
1.2k
秘伝の `gitconfig`
to4iki
1
470
Abema iOS Architecture
to4iki
12
3.6k
timetable-bot
to4iki
0
15k
BLoC Pattern Introduction with Swift
to4iki
2
1.4k
nel
to4iki
0
200
Other Decks in Programming
See All in Programming
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
720
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
250
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
150
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
460
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
490
Workers Cache を知る
syumai
0
350
Simple Storage Service(S3) is not simple
iwatsukayura
0
260
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
370
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
980
SREの越境 / SRE Collaboration
y0hgi
2
300
APNsからLive Activityを開始する話
yumnumm
0
160
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
550
The Language of Interfaces
destraynor
162
27k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
How to Ace a Technical Interview
jacobian
280
24k
Unsuck your backbone
ammeep
672
58k
Chasing Engaging Ingredients in Design
codingconduct
0
360
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
980
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
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