Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ࣗݾ঺հ ■ ࢛ํɹ༟ ■ 2018೥6݄ Sansan → DeNA ■ DeNAͷϔϧεέΞࣄۀ෦Ͱ৽نαʔϏε։ൃΛ୲౰ ■ DeNAʹೖࣾͯ͠1೥൒Ͱ15kg૫ͤ·ͨ͠ ■ ৄ͘͠͸ DeNA TechCon 2020 Ͱ࿩͠·͢ ■ 2020/03/04 Wed. @ ौ୩ώΧϦΤ 2

Slide 3

Slide 3 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 3 ৽نαʔϏε։ൃͷ࿩

Slide 4

Slide 4 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϔϧεέΞͷ৽نαʔϏε։ൃ ■ 1೥൒ͰϔϧεέΞؔ࿈ΞϓϦ3ຊΛ৽ن։ൃ ■ ͍ͣΕ΋ඇClean Architecture ■ ͏ͪҰຊ͸͓ଂೖΓ ■ ݱࡏ͸4ຊ໨ͷΞϓϦΛ։ൃத ■ Clean ArchitectureΛ࠾༻ 4

Slide 5

Slide 5 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϓϩδΣΫτ ■ ։ൃظؒ ■ 2ʙ10ϲ݄ ■ ։ൃظؒʹ͸༨༟͕͋Δ͕ɺ࣮ࡍʹ࡞ͬͯΈͯݫͦ͠͏ͳΒଧͪ੾Δ͜ͱ΋ ■ ςετظؒͳͲ͸ผϓϩδΣΫτͷ։ൃ΋ฒ૸ ■ ։ൃମ੍ ■ ΞϓϦ1໊ɺόοΫΤϯυ2໊ ■ ਓͷग़ೖΓ ■ ͨ·ʹԉ܉͕ૹΒΕͯ͘ΔʢϨϕϧײ·ͪ·ͪʣ 5

Slide 6

Slide 6 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 6 ϓϩδΣΫτߏ੒

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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 ϓϨθϯςʔγϣϯ υϝΠϯ

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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ͱͯ͠อ࣋ &੾Γସ͑

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. Router 12 ը໘͔Βൃੜ͢Δը໘ભҠΛఆٛ

Slide 13

Slide 13 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. TransitionProtocol 13 ը໘ભҠ͕ൃੜ͢Δ਌ViewControllerʹ࣋ͨͤΔΠϯλʔϑΣʔε ʢProgressΛ͜͜ʹ࣋ͨͤΔ͔͸͔ͳΓ໎ͬͨʣ

Slide 14

Slide 14 text

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ͷΠϯελϯεΛड ͚औΔ • υϝΠϯϩδοΫͱͷ઀఺

Slide 15

Slide 15 text

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 • ϓϨθϯςʔγϣϯͱͷ઀఺

Slide 16

Slide 16 text

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ͷ࣮૷ • ௨৴ͱσʔλͷ֨ೲΛ࣮ࡍʹߦ͏

Slide 17

Slide 17 text

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ͷ࣮૷ • σʔλͷऔಘ΍֨ೲͷΈΛߦ͏

Slide 18

Slide 18 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 18 Clean Architecture & Embedded Framework Λ࢖͏ϝϦοτ

Slide 19

Slide 19 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 19 ։ൃࢹ఺

Slide 20

Slide 20 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ։ൃࢹ఺ͰͷϝϦοτ ■ ૄ݁߹ ■ Ͳ͜ʹͳʹ͕࣮૷͞Ε͍ͯΔ͔͕ࣗ໌ʹͳΔ ■ DIͰϩδοΫͷࠩ͠ସ͕͑༰қʹͳΔ ■ ϓϩτλΠϐϯά΍ಈ࡞֬ೝͷදࣔσʔλग़͠෼͚ ■ ϝϯόʔͷೖΕସΘΓ ■ ϝϯόʔͷεΩϧϨϕϧʹ߹Θ࣮ͤͯ૷ΛϨΠϠʔ୯ҐͰ෼୲Ͱ͖Δ ■ iOSʹशख़͍ͯ͠ͳͯ͘΋UI͚ͩɺϏδωεϩδοΫ͚ͩ੾Γग़ͤΔ ■ iOSʹशख़͍ͯ͠Δਓ͸ΩϟονΞοϓָ͕ʹͳΔ 20

Slide 21

Slide 21 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 21 ϓϩμΫτࢹ఺

Slide 22

Slide 22 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ϔϧεέΞϓϩμΫτࢹ఺ͰͷϝϦοτ 22 APP Show App Watch Extension ΍ Widget΁ͷରԠָ͕ʹͳΔ Embedded Framework ✘ ✔

Slide 23

Slide 23 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 23 ࣄۀࢹ఺

Slide 24

Slide 24 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ࣄۀࢹ఺ͰͷϝϦοτ ݈߁ߦಈ × ސ٬૚Ͱෳ਺ͷαʔϏεΛ࡞͍ͬͯΔ 24 า͘ ݮྔ ېԎ B2B2C αʔϏεA αʔϏεB αʔϏεC B2C αʔϏεD αʔϏεE ? B2C (ΞϥΠΞϯε) αʔϏεF ? ?

Slide 25

Slide 25 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ࣄۀࢹ఺ͰͷϝϦοτ ݈߁ߦಈ × ސ٬૚Ͱෳ਺ͷαʔϏεΛ࡞͍ͬͯΔ 25 UI͸ҟͳΔ͕݈߁ߦಈ͝ͱͷϏδωεϩδοΫ͸ࣅ͍ͯΔ า͘ ݮྔ ېԎ B2B2C αʔϏεA αʔϏεB αʔϏεC B2C αʔϏεD αʔϏεE ? B2C (ΞϥΠΞϯε) αʔϏεF ? ? →υϝΠϯϩδοΫΛ੾Γग़͓ͯ͘͜͠ͱͰผϓϩμΫτͰ࠶ར༻Ͱ͖Δ

Slide 26

Slide 26 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 26 Embedded Framework ͷ෼ׂʹ͍ͭͯ

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ͳͥ Embedded Framework ͕Ұ͚ͭͩͳͷ͔ ■ νʔϜʹXcodeϓϩδΣΫτઃఆͷख࿅͕͍ͳ͍ͱ٧ΉϦεΫ ■ XcodeͷTargetઃఆ ■ ϥΠϒϥϦ௥Ճ ■ ґଘؔ܎ ■ Entity <-UseCase <- InterfaceAdapter <- Framework/Driver ■ ͋ͱ͔Β෼ׂͰ͖ͳ͘͸ͳ͍ 28

Slide 29

Slide 29 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 29 ·ͱΊ

Slide 30

Slide 30 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 30 θϩΠνϑΣʔζ͔ΒClean ArchitectureΛಋೖ͢Δ

Slide 31

Slide 31 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. ʰٕज़త౤ࢿʱͱͯ͠Ϧλʔϯ͕ݟࠐΊΔͳΒ͋ΓͰ͸ ■ ϔϧεέΞͷ৔߹͸Ϧλʔϯ͕ݟࠐΊͦ͏ˍֶशίετΛڐ༰Ͱ͖ͦ͏ͳͷͰಋ ೖͨ͠ ■ ελʔτΞοϓ΍ϕϯνϟʔͳͲখن໛or୹ظϓϩδΣΫτͩͱݫͦ͠͏ ■ ࣄۀ/ϓϩμΫτ/։ൃͷࢹ఺ͰϦιʔεΛ౤ࢿ͢΂͖͔ͷ൑அΛ 31

Slide 32

Slide 32 text

Copyright (C) 2020 DeNA Co.,Ltd. All Rights Reserved. 32