Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
ゼロイチフェーズからのCleanArchitecture/ios_ca
dotrikun
January 21, 2020
Programming
2
610
ゼロイチフェーズからのCleanArchitecture/ios_ca
dotrikun
January 21, 2020
Tweet
Share
More Decks by dotrikun
See All by dotrikun
鉄道アプリを支えるテクノロジー
dotrikun
0
540
フィードやチャットのスクロールを全力でなめらかにする/iOSDC2019-LT
dotrikun
3
1.4k
不摂生で救急搬送されたiOSアプリ開発者が iPhoneとAppleWatchをフル活用して健康を取り戻した話 / iosdc2018
dotrikun
2
10k
アプリ開発のアンチパターンを踏み抜きながら アプリをフルリニューアルした話
dotrikun
17
10k
個人情報を扱うアプリと暗号化について
dotrikun
1
700
スマート山ごもりでアプリを高速開発する
dotrikun
0
860
Other Decks in Programming
See All in Programming
フロントエンドで学んだことをデータ分析で使ってみた話
daichi_igarashi
0
160
An Advanced Introduction to R
nicetak
0
1.5k
SHOWROOMの分析目的を意識した伝え方・コミュニケーション
hatapu
0
230
ちょうぜつ改め21世紀ふつうのソフトウェア設計
tanakahisateru
7
5.4k
僕が考えた超最強のKMMアプリの作り方
spbaya0141
0
170
AWSとCPUのムフフな関係
cmdemura
0
430
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
T3 Stack and TypeScript ecosystem
quramy
3
630
Remix + Cloudflare Pages + D1 で ポケモン SV のレンタルチームを検索できるアプリを作ってみた
kuroppe1819
3
1.1k
tidy_rpart
bk_18
0
390
Hono v3 - Do Everything, Run Anywhere, But Small, And Faster
yusukebe
4
120
Azure Functionsをサクッと開発、サクッとデプロイ/vscodeconf2023-baba
nina01
1
320
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
38
7.7k
Into the Great Unknown - MozCon
thekraken
2
270
The Straight Up "How To Draw Better" Workshop
denniskardys
225
130k
Robots, Beer and Maslow
schacon
154
7.3k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
13
5.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
240
11k
How STYLIGHT went responsive
nonsquared
89
4.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
32
6.7k
4 Signs Your Business is Dying
shpigford
171
20k
Optimizing for Happiness
mojombo
365
64k
Building Adaptive Systems
keathley
27
1.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