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
550
鉄道アプリを支えるテクノロジー
dotrikun
1
2.4k
フィードやチャットのスクロールを全力でなめらかにする/iOSDC2019-LT
dotrikun
3
2.3k
不摂生で救急搬送されたiOSアプリ開発者が iPhoneとAppleWatchをフル活用して健康を取り戻した話 / iosdc2018
dotrikun
2
12k
アプリ開発のアンチパターンを踏み抜きながら アプリをフルリニューアルした話
dotrikun
17
11k
個人情報を扱うアプリと暗号化について
dotrikun
1
890
スマート山ごもりでアプリを高速開発する
dotrikun
0
1k
Other Decks in Programming
See All in Programming
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
130
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
160
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
700
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
440
数百円から始めるRuby電子工作
tarosay
0
160
今さら聞けない .NET CLI
htkym
0
190
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
730
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
990
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
160
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
130
FDEが実現するAI駆動経営の現在地
gonta
2
280
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
120
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
6.2k
Optimizing for Happiness
mojombo
378
71k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
4 Signs Your Business is Dying
shpigford
187
23k
Ruling the World: When Life Gets Gamed
codingconduct
0
300
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
It's Worth the Effort
3n
188
29k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
210
The untapped power of vector embeddings
frankvandijk
2
1.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
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