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
ゼロイチフェーズからのCleanArchitecture/ios_ca
Search
dotrikun
January 21, 2020
Programming
1.2k
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
580
鉄道アプリを支えるテクノロジー
dotrikun
1
2.5k
フィードやチャットのスクロールを全力でなめらかにする/iOSDC2019-LT
dotrikun
3
2.3k
不摂生で救急搬送されたiOSアプリ開発者が iPhoneとAppleWatchをフル活用して健康を取り戻した話 / iosdc2018
dotrikun
2
12k
アプリ開発のアンチパターンを踏み抜きながら アプリをフルリニューアルした話
dotrikun
17
11k
個人情報を扱うアプリと暗号化について
dotrikun
1
910
スマート山ごもりでアプリを高速開発する
dotrikun
0
1k
Other Decks in Programming
See All in Programming
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
React Native経験者が Flutterを30⽇間触って驚いたこと
3saito
0
140
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
160
Next.js: The final boss of Web Performance
guaca
0
380
Getting Started with Vibe Coding
miccheng
0
180
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
280
Spec-driven Development with AI
simas
PRO
0
2.2k
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
500
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
1
120
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
450
Modernizing iOS Apps
seyfoyun
0
150
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Building an army of robots
kneath
307
47k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Accessibility Awareness
sabderemane
1
280
Optimizing for Happiness
mojombo
378
71k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.6k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
3k
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