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
85
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.3k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
4.7k
ビューインプレッションの計測方法
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
Goで作る、開発・CI環境
sin392
0
230
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
130
AI時代のソフトウェア開発を考える(2025/07版) / Agentic Software Engineering Findy 2025-07 Edition
twada
PRO
88
30k
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
1
5.9k
RailsGirls IZUMO スポンサーLT
16bitidol
0
190
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
130
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
12
4.5k
Hack Claude Code with Claude Code
choplin
4
2.1k
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
230
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
320
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
640
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
800
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Facilitating Awesome Meetings
lara
54
6.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
BBQ
matthewcrist
89
9.7k
Gamification - CAS2011
davidbonilla
81
5.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
The Pragmatic Product Professional
lauravandoore
35
6.7k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Unsuck your backbone
ammeep
671
58k
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