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
ゼロイチフェーズからのCleanArchitecture/ios_ca
Search
dotrikun
January 21, 2020
Programming
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ゼロイチフェーズからのCleanArchitecture/ios_ca
dotrikun
January 21, 2020
More Decks by dotrikun
See All by dotrikun
iOSDC2023LT
dotrikun
0
530
鉄道アプリを支えるテクノロジー
dotrikun
1
2.3k
フィードやチャットのスクロールを全力でなめらかにする/iOSDC2019-LT
dotrikun
3
2.2k
不摂生で救急搬送されたiOSアプリ開発者が iPhoneとAppleWatchをフル活用して健康を取り戻した話 / iosdc2018
dotrikun
2
12k
アプリ開発のアンチパターンを踏み抜きながら アプリをフルリニューアルした話
dotrikun
17
11k
個人情報を扱うアプリと暗号化について
dotrikun
1
890
スマート山ごもりでアプリを高速開発する
dotrikun
0
1k
Other Decks in Programming
See All in Programming
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.7k
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
180
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
770
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
180
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
7k
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
270
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
230
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
280
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.5k
JavaDoc 再入門
nagise
1
430
スマートグラスで並列バイブコーディング
hyshu
0
270
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
Thoughts on Productivity
jonyablonski
76
5.2k
We Have a Design System, Now What?
morganepeng
55
8.2k
Producing Creativity
orderedlist
PRO
348
40k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Visualization
eitanlees
152
17k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Design in an AI World
tapps
1
250
How to Ace a Technical Interview
jacobian
281
24k
New Earth Scene 8
popppiees
3
2.4k
The Spectacular Lies of Maps
axbom
PRO
1
840
Transcript
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Copyright (C)
2020 DeNA Co.,Ltd. All Rights Reserved. θϩΠνϑΣʔζ͔Βͷ Clean Architecture iOS Clean Architecture ษڧձ January 21, 2020 Hiroshi Shikata Healthcare DeNA Co., Ltd. 1
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ࣗݾհ ▪
࢛ํɹ༟ ▪ 20186݄ Sansan → DeNA ▪ DeNAͷϔϧεέΞࣄۀ෦Ͱ৽نαʔϏε։ൃΛ୲ ▪ DeNAʹೖࣾͯ͠1Ͱ15kg૫ͤ·ͨ͠ ▪ ৄ͘͠ DeNA TechCon 2020 Ͱ͠·͢ ▪ 2020/03/04 Wed. @ ौ୩ώΧϦΤ 2
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 3 ৽نαʔϏε։ൃͷ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϔϧεέΞͷ৽نαʔϏε։ൃ ▪
1ͰϔϧεέΞؔ࿈ΞϓϦ3ຊΛ৽ن։ൃ ▪ ͍ͣΕඇClean Architecture ▪ ͏ͪҰຊ͓ଂೖΓ ▪ ݱࡏ4ຊͷΞϓϦΛ։ൃத ▪ Clean ArchitectureΛ࠾༻ 4
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϓϩδΣΫτ ▪
։ൃظؒ ▪ 2ʙ10ϲ݄ ▪ ։ൃظؒʹ༨༟͕͋Δ͕ɺ࣮ࡍʹ࡞ͬͯΈͯݫͦ͠͏ͳΒଧͪΔ͜ͱ ▪ ςετظؒͳͲผϓϩδΣΫτͷ։ൃฒ ▪ ։ൃମ੍ ▪ ΞϓϦ1໊ɺόοΫΤϯυ2໊ ▪ ਓͷग़ೖΓ ▪ ͨ·ʹԉ܉͕ૹΒΕͯ͘ΔʢϨϕϧײ·ͪ·ͪʣ 5
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 6 ϓϩδΣΫτߏ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. App ϓϩδΣΫτߏ
7 Classes/ UI/ViewControllers/ Embedded Framework Entity/ AccessToken.swift UseCase/ InterfaceAdapter/ Framework_Driver/ DataStore/ WebClient/ AppDelegate.swift DomainLayerDependency.swift AppRoot/ Login/ AppRootViewController.swift UI/Components/ UI/Protocols/ LoginViewController.swift LoginViewModel.swift LoginViewRouter.swift AccessToken.swift AuthUseCase.swift AuthGateWay.swift KeychainDataStore.swift AuthWebAPI.swift
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. App ϓϩδΣΫτߏ
8 Classes/ UI/ViewControllers/ Embedded Framework Entity/ AccessToken.swift UseCase/ InterfaceAdapter/ Framework_Driver/ DataStore/ WebClient/ AppDelegate.swift LayerDependency.swift AppRoot/ Login/ AppRootViewController.swift UI/Components/ UI/Protocols/ LoginViewController.swift LoginViewModel.swift LoginViewRouter.swift AccessToken.swift AuthUseCase.swift AuthGateWay.swift KeychainDataStore.swift AuthWebAPI.swift ϓϨθϯςʔγϣϯ υϝΠϯ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. App ϓϩδΣΫτߏ
9 Classes/ UI/ViewControllers/ AppDelegate.swift DomainLayerDependency.swift AppRoot/ Login/ AppRootViewController.swift UI/Components/ UI/Protocols/ LoginViewController.swift LoginViewModel.swift LoginViewRouter.swift UseCaseͷΠϯελϯεΛอ࣋͢Δ Singleton
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. App ϓϩδΣΫτߏ
10 Classes/ UI/ViewControllers/ AppDelegate.swift DomainLayerDependency.swift AppRoot/ Login/ AppRootViewController.swift UI/Components/ UI/Protocols/ LoginViewController.swift LoginViewModel.swift LoginViewRouter.swift • UIWindowͷrootViewController • εϓϥογϡ/ΥʔΫεϧʔͳͲφϏήʔ γϣϯͷىΛchildViewControllerͱͯ͠อ࣋ &Γସ͑
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. App ϓϩδΣΫτߏ
11 Classes/ UI/ViewControllers/ AppDelegate.swift DomainLayerDependency.swift AppRoot/ Login/ AppRootViewController.swift UI/Components/ UI/Protocols/ LoginViewController.swift LoginViewModel.swift LoginViewRouter.swift
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. Router 12
ը໘͔Βൃੜ͢Δը໘ભҠΛఆٛ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. TransitionProtocol 13
ը໘ભҠ͕ൃੜ͢ΔViewControllerʹ࣋ͨͤΔΠϯλʔϑΣʔε ʢProgressΛ͜͜ʹ࣋ͨͤΔ͔͔ͳΓ໎ͬͨʣ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. App ϓϩδΣΫτߏ
14 Classes/ UI/ViewControllers/ AppDelegate.swift DomainLayerDependency.swift AppRoot/ Login/ AppRootViewController.swift UI/Components/ UI/Protocols/ LoginViewController.swift LoginViewModel.swift LoginViewRouter.swift • ViewController͔ΒUseCaseͷΠϯελϯεΛड ͚औΔ • υϝΠϯϩδοΫͱͷ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϓϩδΣΫτߏ 15
Embedded Framework Entity/ AccessToken.swift UseCase/ InterfaceAdapter/ Framework_Driver/ DataStore/ WebClient/ AccessToken.swift AuthUseCase.swift AuthGateWay.swift KeychainDataStore.swift AuthWebAPI.swift • ϓϨθϯςʔγϣϯͱͷ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϓϩδΣΫτߏ 16
Embedded Framework Entity/ AccessToken.swift UseCase/ InterfaceAdapter/ Framework_Driver/ DataStore/ WebClient/ AccessToken.swift AuthUseCase.swift AuthGateWay.swift KeychainDataStore.swift AuthWebAPI.swift • UseCase͔Βެ։͞Εͨprotocolͷ࣮ • ௨৴ͱσʔλͷ֨ೲΛ࣮ࡍʹߦ͏
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϓϩδΣΫτߏ 17
Embedded Framework Entity/ AccessToken.swift UseCase/ InterfaceAdapter/ Framework_Driver/ DataStore/ WebClient/ AccessToken.swift AuthUseCase.swift AuthGateWay.swift KeychainDataStore.swift AuthWebAPI.swift • GateWay͔Βެ։͞Εͨprotocolͷ࣮ • σʔλͷऔಘ֨ೲͷΈΛߦ͏
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 18 Clean
Architecture & Embedded Framework Λ͏ϝϦοτ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 19 ։ൃࢹ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ։ൃࢹͰͷϝϦοτ ▪
ૄ݁߹ ▪ Ͳ͜ʹͳʹ͕࣮͞Ε͍ͯΔ͔͕ࣗ໌ʹͳΔ ▪ DIͰϩδοΫͷࠩ͠ସ͕͑༰қʹͳΔ ▪ ϓϩτλΠϐϯάಈ࡞֬ೝͷදࣔσʔλग़͚͠ ▪ ϝϯόʔͷೖΕସΘΓ ▪ ϝϯόʔͷεΩϧϨϕϧʹ߹Θ࣮ͤͯΛϨΠϠʔ୯ҐͰ୲Ͱ͖Δ ▪ iOSʹशख़͍ͯ͠ͳͯ͘UI͚ͩɺϏδωεϩδοΫ͚ͩΓग़ͤΔ ▪ iOSʹशख़͍ͯ͠ΔਓΩϟονΞοϓָ͕ʹͳΔ 20
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 21 ϓϩμΫτࢹ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϔϧεέΞϓϩμΫτࢹͰͷϝϦοτ 22
APP Show App Watch Extension WidgetͷରԠָ͕ʹͳΔ Embedded Framework ✘ ✔
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 23 ࣄۀࢹ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ࣄۀࢹͰͷϝϦοτ ݈߁ߦಈ
× ސ٬ͰෳͷαʔϏεΛ࡞͍ͬͯΔ 24 า͘ ݮྔ ېԎ B2B2C αʔϏεA αʔϏεB αʔϏεC B2C αʔϏεD αʔϏεE ? B2C (ΞϥΠΞϯε) αʔϏεF ? ?
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ࣄۀࢹͰͷϝϦοτ ݈߁ߦಈ
× ސ٬ͰෳͷαʔϏεΛ࡞͍ͬͯΔ 25 UIҟͳΔ͕݈߁ߦಈ͝ͱͷϏδωεϩδοΫࣅ͍ͯΔ า͘ ݮྔ ېԎ B2B2C αʔϏεA αʔϏεB αʔϏεC B2C αʔϏεD αʔϏεE ? B2C (ΞϥΠΞϯε) αʔϏεF ? ? →υϝΠϯϩδοΫΛΓग़͓ͯ͘͜͠ͱͰผϓϩμΫτͰ࠶ར༻Ͱ͖Δ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 26 Embedded
Framework ͷׂʹ͍ͭͯ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. Embedded Framework
Ͳ͏͚Δʁ 27 Embedded Framework Entity/ UseCase/ InterfaceAdapter/ Framework_Driver/ Embedded Framework (InterfaceAdapter) Embedded Framework (Entity) Embedded Framework (UseCase) Embedded Framework (Framework_Driver) VS
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ͳͥ Embedded
Framework ͕Ұ͚ͭͩͳͷ͔ ▪ νʔϜʹXcodeϓϩδΣΫτઃఆͷख࿅͕͍ͳ͍ͱ٧ΉϦεΫ ▪ XcodeͷTargetઃఆ ▪ ϥΠϒϥϦՃ ▪ ґଘؔ ▪ Entity <-UseCase <- InterfaceAdapter <- Framework/Driver ▪ ͋ͱ͔ΒׂͰ͖ͳ͘ͳ͍ 28
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 29 ·ͱΊ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 30 θϩΠνϑΣʔζ͔ΒClean
ArchitectureΛಋೖ͢Δ
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ʰٕज़తࢿʱͱͯ͠Ϧλʔϯ͕ݟࠐΊΔͳΒ͋ΓͰ ▪
ϔϧεέΞͷ߹Ϧλʔϯ͕ݟࠐΊͦ͏ˍֶशίετΛڐ༰Ͱ͖ͦ͏ͳͷͰಋ ೖͨ͠ ▪ ελʔτΞοϓϕϯνϟʔͳͲখنorظϓϩδΣΫτͩͱݫͦ͠͏ ▪ ࣄۀ/ϓϩμΫτ/։ൃͷࢹͰϦιʔεΛࢿ͖͔͢ͷஅΛ 31
Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 32