Slide 1

Slide 1 text

10෼ͰৼΓฦΔ ιϑτ΢ΣΞΞʔΩςΫ νϟ ͷྺ࢙2017 by takasek 2017/3/16 CAMPFIRE iOS #1 1

Slide 2

Slide 2 text

͸͡Ίʹ ʢ2017/3/23 Ճචʣ ͜Ε͸ɺiOSΤϯδχΞ͕Α͘৮ΕΔɺओʹ GUIΞϓϦͷΞʔΩςΫνϟΛओ؟ʹஔ͍ͨ ൃදͰ͢ɻ 2

Slide 3

Slide 3 text

MVC, MVP, MVVM, Layered Architecture, Clean Architecture, VIPER, Flux, Redux, DDD, MVA, …????? 3

Slide 4

Slide 4 text

!" 4

Slide 5

Slide 5 text

·ͣɺ֓೦ͷ੔ཧ ! GUI Architectures ɹ … MVC, MVP, MVVM, etc • ViewͱModel(=ϏδωεϩδοΫ)ͷ෼཭ • ର৅: αϒγεςϜ • ModelΑΓԞଆ͸஌ΒΜ ! System Architectures ɹ … Layered Architecture, ɹɹ Clean Architecture, ɹɹ VIPER, etc • ର৅: γεςϜશମ 5

Slide 6

Slide 6 text

GUI Architectures 6

Slide 7

Slide 7 text

GUI Architectures ᶃ MVC Model-View- Controller (1979-) ΈΜͳ஌ͬͯΔ͚ͲɺΈΜͳޡղͯ͠Δɻ 7

Slide 8

Slide 8 text

MVC: Model-View- Controller(1979-) Smalltalk։ൃऀͷͻͱΓ Reenskaug͕ߟҊ C: Ϣʔβʔૢ࡞Λड͚ M: σʔλΛมߋ V: MͷมߋΛobserve 8

Slide 9

Slide 9 text

MVC: Model-View- Controller(1979-) ΁ʔʂ M→V͸ observerύλʔϯ ʢ1ݸͷMͷมߋΛ ɹnݸͷVʹ఻͑ΔͨΊʣ …ͩͬͨΜͩͶʁ 9

Slide 10

Slide 10 text

"MVC͸ਓؒͱͦͷϝϯλϧϞσϧʹؔ͢Δ ΋ͷͰ͋ΓɺΦϒβʔόύλʔϯʹؔ͢Δ΋ ͷͰ͸ͳ͍ɻ" -- The DCI Architecture (Reenskaug and O. Coplien, 2009, ࿨ஐӈܡ(༁)) 10

Slide 11

Slide 11 text

MVC͕ຊ౰ʹ΍Γ͔ͨͬͨ͜ͱ "ΑΓਂ͍ࢹ఺͔ΒݟΕ͹ɺ͜ͷϑϨʔϜϫʔΫ͸ ϢʔβΠϯλϥΫγϣϯ͔Β৘ใͷද৅Λ෼཭͢Δ ͨΊʹଘࡏ͍ͯ͠Δɻ" "Ϟσϧ-Ϗϡʔ-ίϯτϩʔϥ-ϢʔβΛཁ໿͢Ε ͹ɺίϯϐϡʔλͱਓؒͷΠϯλϥΫγϣϯʹ͓͚ Δࢥߟʢ"thinking"ʣͷ෦෼Λࢧ͑Δʹ͸༏Ε͍ͯ Δͷͩɻ" - The DCI Architecture (Reenskaug and O. Coplien, 2009, ࿨ஐӈܡ(༁)) 11

Slide 12

Slide 12 text

MVCʹ଍Γͳ͔ͬͨ͜ͱ "ΦϒδΣΫτࢦ޲ʹ΄ͱΜͲͳ͘ɺMVCʹ͓͍ ͯ͸શ͘ଘࡏ͠ͳ͍͜ͱ͕͋ΔɻͦΕ͸ߦಈΛ ίʔυͰͱΒ͑Δ͜ͱ͕Ͱ͖ΔΑ͏։ൃऀΛॿ͚ Δͱ͍͏͜ͱͩɻΤϯυϢʔβͷ;Δ·্͍ͷཁ ݅ʹ͍ͭͯ࿦ཧతʹߟ͑Δ৔ॴΛɺ։ൃऀ͸࣋ͬ ͍ͯͳ͍ͷͰ͋Δɻ" - The DCI Architecture (Reenskaug and O. Coplien, 2009, ࿨ஐӈܡ(༁)) 12

Slide 13

Slide 13 text

ͪͳΈʹਐԽܗMVCͬΆ͍΋ͷͱͯ͠… DCI(Data-Context-Interaction) Architecture(2009-) • ίϯςΩετ • ϩʔϧ ʹΑΔ;Δ·͍ͷදݱ ͖ͬ͞ͷ࿦จதͰɺReenskaugത͕࢜ޠͬͯͨΜ ͚ͩͲɺলུɻ 13

Slide 14

Slide 14 text

΋͏ͻͱͭ༨ஊͰɺ MVC Model2(1999-) MVCΛJSP(JavaServer Pages)ʹద༻ͨ͠΋ͷ1 Model2Ͱ͸Observerύλʔ ϯ͸࢖ΘΕͳ͍ 1 Understanding JavaServer Pages Model 2 architecture | JavaWorld http://www.javaworld.com/article/2076557/ java-web-development/understanding- javaserver-pages-model-2-architecture.html 14

Slide 15

Slide 15 text

GUI Architectures ᶄ MVP Model-View- Presenter (1990-) ;Δ·͍ͷஔ͖৔Λ୳ͯ͠… 15

Slide 16

Slide 16 text

MVP(Supervising Controller)(1990-) 16

Slide 17

Slide 17 text

MVP(Supervising Controller)(1990-) IBMͱAppleڞಉ։ൃͷOS Taligent Ͱ࢖ΘΕͨ ౰ॳͷߏ଄͸ ਓྨʹ͸ෳࡶ͗ͨ͢ͷͰɺ ੔ཧ͞Ε͍ͯͬͨ ! 17

Slide 18

Slide 18 text

MVP(Supervising Controller) ͷ໰୊఺ ViewͱModel͕ observerύλʔϯͰ ઀ଓ͞Ε͓ͯΓɺ • VɾM͕࠶ར༻ͮ͠Β͍ • ςετ͕ॻ͖ͮΒ͍ 18

Slide 19

Slide 19 text

MVP (Passive Views) (2006-) MVP(Supervising Controller)ʹର͠ MVP(Passive Views)ͱݺ͹ΕΔ Humble(ݠڏͳ) Dialog Box ͱ΋͍͏ ݱ୅ʹೃછΈͷ͋Δ MVPͰ͢Ͷʂ 19

Slide 20

Slide 20 text

ͱ͜ΖͰɺ MVP(Supervising Controller) ͷ໰୊఺ • VɾM͕࠶ར༻ͮ͠Β͍ • ςετ͕ॻ͖ͮΒ͍ ! V͕MΛobserve…ͬͯ Ͳ͔ͬͰฉ͍ͨΑ͏ͳ… 20

Slide 21

Slide 21 text

ͦ͏Ͱ͢ʂ ࿩͸લޙ͢Δ͚Ͳ ෳ߹ύλʔϯͱͯ͠ͷ MVCʢCocoaʣ ैདྷͷMVCʹ΋ಉ͡໰୊͕͋ͬͨ ͳͷͰɺApple(ḪΕ͹NeXT)͸ ʮվྑܕͷෳ߹ύλʔϯMVCʯ ! Λਪ঑͍ͯ͠Δ • V͕MΛobserve͢ΔͷͰ͸ͳ͘ɺ ɹ C͕Mediatorʹ • VɾMΛ׬શʹ෼཭͠ɺ࠶ར༻ੑup https://developer.apple.com/jp/ documentation/CocoaEncyclopedia.pdf 21

Slide 22

Slide 22 text

ͪͳΈʹMVPͱMVCͷҧ͍ • MVC͸ • ControllerͰinputΛड͚Δ • ViewͱController͸ϦονͳUIͰ͸݁߹͠΍͘͢ɺ Controller͕ViewͷϥΠϑαΠΫϧʹґଘ͢Δ • MVP͸ • ViewͰinputΛड͚Δ ※Controller͸Viewͱ෼཭ࠔ೉ͳͷͰಉҰࢹ͢Δ • ViewͱPresenter͸෼཭͞Ε͓ͯΓɺ PresenterͷΈͰͷ୯ମςετ΋Մೳ 22

Slide 23

Slide 23 text

GUI Architectures ᶅ MVVM Model-View- ViewModel (2009-) Windows Presentation Foundationͷ σʔλόΠϯσΟϯάػߏΛ׆༻ͯ͠Έͨ 23

Slide 24

Slide 24 text

MVVM Model-View-ViewModel (2009-) Microsoftൃ঵ WPF(Windows Presentation Foundation) ʢݴޠ࢓༷ϨϕϧͰσʔλόΠϯσΟϯάՄʣ Λલఏͱͨ͠ΞʔΩςΫνϟ 24

Slide 25

Slide 25 text

GUI Architectures ᶆ Flux (2014-) Facebookͷߟ͑ͨ࠷ڧͷσʔλϑϩʔϞσϧ 25

Slide 26

Slide 26 text

Flux(2014-) Facebook੡ͷ σʔλϑϩʔϞσϧ Facebook ʮMVC͕ෳࡶʹͳΔݪҼ͸ ɹ૒ํ޲ͷσʔλϑϩʔʯ Flux͸ ୯ํ޲σʔλϑϩʔΛ୲อ 26

Slide 27

Slide 27 text

GUI Architecturesʹ͍ͭͯ͸ ͱΓ͋͑ͣ͜͜·Ͱ 27

Slide 28

Slide 28 text

͓͞Β͍ ! GUI Architectures ɹ … MVC, MVP, MVVM, etc • ViewͱModel(=ϏδωεϩδοΫ)ͷ෼཭ • ର৅: αϒγεςϜ • ModelΑΓԞଆ͸஌ΒΜ ! System Architectures ɹ … Layered Architecture, ɹɹ Clean Architecture, ɹɹ VIPER, etc • ର৅: γεςϜશମ ͱ͍͏͜ͱͰޙ൒ઓ… 28

Slide 29

Slide 29 text

System Architectures 29

Slide 30

Slide 30 text

System Architectures ᶃ Layered Architecture 30

Slide 31

Slide 31 text

Layered Architecture • ֤ϨΠϠ͸ࣗ෼ΑΓԼҐ૚ʹґଘ͢Δ • ্Ґ૚ʹରͯ͠͸ૄ݁߹ʹ ૚ͷ۠෼ʹ͸όϦΤʔγϣϯ͋Γ Eric EvansʮDomain Driven DesignʯͰ͸ • UI૚ • Application૚ • Domain૚ • Infrastructure૚ ͱ͍͏۠෼͕঺հ͞Ε͍ͯΔ 31

Slide 32

Slide 32 text

ิ଍: DDD(Domain Driven Design)ͱ Layered Architectureʹ͍ͭ ͯ EvansͷDDDຊͰ͸Layered ArchitectureΛى఺ʹ࿩ΛਐΊ͍ͯ Δ͕ɺDDDͦͷ΋ͷ͸ΞʔΩςΫ νϟύλʔϯͰ͸ͳ͍ DDD͸ɺApplication૚ / Infrastructure૚ ͔ΒDomain૚ʹ ͋Δ΂͖ϩδοΫΛ෼཭͠ɺۀ຿஌ࣝ ΍ίϛϡχέʔγϣϯ΋ؚΊ࣮૷ͱҰ க͍ͤͯ͜͞͏ͱ͍͏ϞσϦϯάख๏ ※౰ॳʮDDD͸Layered Architecture͕લఏʯͱॻ͍͓ͯΓ ·͕ͨ͠ɺޠฐͷ͋ΔදݱͰͨ͠ɻ ! 32

Slide 33

Slide 33 text

System Architectures ᶄ Hexagonal Architecture (2002?-) ʮ࿡֯ܗͷൿີ͸Ͷ̇ …ผʹ਺ࣈʹҙຯ͸ͳ͍ʯ 33

Slide 34

Slide 34 text

Hexagonal Architecture(2002?-) গͳ͘ͱ΋2002೥Ҏલʹ͸ଘࡏ ಈػ Layered Architectureͷ໰୊఺: • UIͷࣗಈςετͮ͠Β͍ • DB΋Կނ͔ςετͮ͠Β͍ ղܾࡦ ΞϓϦͱͷ઀߹෦Λϙʔτͱݺͼɺ దٓɺςετ༻ͷΞμϓλΛ ෇͚ସ͑ΒΕΔ࡞Γʹ͢Δ 34

Slide 35

Slide 35 text

Hexagonal Architecture(2002?-) Ұ࣍ݩͷ૚ͷΞφϩδʔ͔Β ཭ΕΔͨΊɺ ࿡֯ܗͰදݱͯ͠Έ·ͨ͠ 35

Slide 36

Slide 36 text

System Architectures ᶅ Onion Architecture (2008-) ʮٯʹߟ͑ΔΜͩɻ(૚Λ)্͛ͪΌͬͯ΋͍͍͞ ͱߟ͑ΔΜͩʯ 36

Slide 37

Slide 37 text

Onion Architecture(2008-) Clear MeasureࣾͷCEO Jeffrey Palermo͕ ϒϩάʹవΊͨ ᐌ͘ ʮLayered Architecture͸ ɹ্૚ ➡ Infra૚ ɹ…ͬͯґଘ͕͋Δ͚Ͳ ɹ໼ҹͷํ޲ɺٯ͡Όͳ͍ʁ 37

Slide 38

Slide 38 text

Onion Architecture(2008-) Jeffʮ͜͏͡Όͳ͍ʁʯ 38

Slide 39

Slide 39 text

Onion Architecture(2008-) • Infra૚͸UI૚ͱಉ͡ ʮ֎ଆʯѻ͍ • ґଘํ޲͸಺޲͖ • ಺ˠ֎΁ͷΞΫηε͸ɺ ґଘੑٯసͷ๏ଇ(DIP)Λ ࢖͏ •಺: ΠϯλϑΣʔεఆٛ •֎: ۩৅Λ࣮૷ 39

Slide 40

Slide 40 text

System Architectures ᶆ Clean Architecture (2012-) ʮ͜Ε·ͰͷΞʔΩςΫνϟΛవΊͨΑɻͶɺ؆୯Ͱ͠ΐʁʯ 40

Slide 41

Slide 41 text

Clean Architecture (2012-) ΞδϟΠϧքͷڊਓ Robert C. Martin (Bob͓͡͞Μ)ʹΑΔఏҊ • Hexagonal Architecture • Onion Architecture • DCI ౳ʑΛɺͻͱͭͷ֓೦ʹ౷߹ 41

Slide 42

Slide 42 text

System Architectures ᶇ VIPER (2013-) Mutual Mobileͷߟ͑ͨ࠷ڧͷiOS൛Clean Architecture 42

Slide 43

Slide 43 text

VIPER (2013-) Mutual Mobile͕ࣾiOSͷͨΊʹߟҊɻ (۩ମతͳObj-C/Swiftͷίʔυꑤ΀΄ͽ ʮΞʔΩςΫνϟʯͱ͍͏ΑΓʮઃܭʯʁ) • View • Interactor • Presenter • Entity • Routing (Wireframe) ͷ಄จࣈΛऔ͍ͬͯΔɻ ը໘ભҠͷ੹຿Λ ViewController͔Β෼཭Ͱ͖Δͷ͕ಛ௃ɻ 43

Slide 44

Slide 44 text

͍ͭͰʹ MVVM-C (2016-) Model-View-ViewModel ʹՃ͑ͯɺը໘ભҠ (Coordinators)Λ ෼཭͢Δઃܭ΋ ఏҊ͞ΕͯΔ ! ͜ͷਤ " ɺBusiness Logic͕ VMʹ͋Δͷ͕ؾʹͳΔ͚Ͳ… 44

Slide 45

Slide 45 text

System Architectures ᶈ Minimum Viable Architecutre (2014-) ٕज़બఆʹޙչ͕ͳ͍ͷ͸ɺଟ෼ΦʔόʔΤϯδχΞϦϯάͷূڌ 45

Slide 46

Slide 46 text

Minimum Viable Architecutre(2014-) eBay, GoogleΛܦͨ ελʔτΞοϓͷCTO Randy ShoupʹΑΔϓϨθϯ ࣄۀͷ੒௕ϑΣʔζʹԠͨ͡ ࠷௿ݶΞʔΩςΫνϟͰॆ෼ ΠςϨʔςΟϒʹ ϘτϧωοΫΛݟ͚ͭͯ ௚͍͚ͯ͠͹͍͍ ͱ͍͏… ΞʔΩςΫνϟͱ͍͏͔… ϝλΞʔΩςΫνϟ…ʁ 46

Slide 47

Slide 47 text

"If you don’t end up regretting your early technology decisions, you probably over engineered. Rearchitecting is a sign of success; if you never need to, either you overbuilt or nobody cares." -- Randy Shoup 47

Slide 48

Slide 48 text

System Architecturesᶈ ❓❔❓ (2017-) ཧ૝ͱݱ࣮ͷؒͰɺ࣍͸ҰମͲΜͳΞʔΩςΫνϟ͕…ʁ 48