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
橋の下で安心して寝るための 『iOSアプリ設計パターン入門』
Search
kameike
January 15, 2019
Technology
0
1.9k
橋の下で安心して寝るための 『iOSアプリ設計パターン入門』
kameike
January 15, 2019
Tweet
Share
More Decks by kameike
See All by kameike
LeanScrum
kameike
3
1.1k
サポートを求めてAppleに電話するまでの道のり
kameike
4
1.8k
header-comment
kameike
5
1.3k
Farewell SnapKit
kameike
1
1.5k
Other Decks in Technology
See All in Technology
エンタープライズ環境下での Active Directory の運用 TIPS
tamaiyutaro
1
1.4k
SREとその組織類型
tatsuo48
8
1.4k
オーナーシップを持つ領域を明確にする
konifar
6
510
Postman v10リリース後を振り返る
nagix
0
110
"好き"との生活/Regularly update profile with GitHub Actions
judeeeee
0
140
Data and AI Governance: Existing Challenges and Emerging Trends
scotthsieh825
0
140
最近たまに見かけるTiDBってなんだ? - Findy
pingcap0315
2
270
The CloudCompare project by Dr. Daniel Girardeau-Montaut
kentaitakura
0
490
自動生成を活用した、運用保守コストを抑える Error/Alert/Runbook の一元集約管理 / Centralized management of Error/Alert/Runbook to minimize operational costs using automated code generation
biwashi
9
2k
4年前、あるじゃん老害エンジニアLT合戦に登壇、米国西海岸コンピュータ歴史博物館体験記の続編
toshi_atsumi
0
180
スタートアップの技術顧問を3年間続けて発生した事と気付き
biwakonbu
0
150
A (short) History of AI
harishpillay
0
100
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
30
12k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Making Projects Easy
brettharned
107
5.5k
The Art of Programming - Codeland 2020
erikaheidi
41
12k
It's Worth the Effort
3n
180
27k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
8
8.3k
RailsConf 2023
tenderlove
1
530
Product Roadmaps are Hard
iamctodd
43
9.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
The Cult of Friendly URLs
andyhume
73
5.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.3k
Transcript
ڮͷԼͰ҆৺ͯ͠৸ΔͨΊͷ ʰJ04ΞϓϦઃܭύλʔϯೖʱ QJYJWJOD !LBNFJLF
!LBNFJLF w ͷ݄͙Β͍͔ΒQJYJWͰಇ͍͍ͯ·͢ w Ԭग़
ʰΦϒδΣΫτࢦʹ͓͚Δ࠶ར༻ͷͨΊͷσβΠϯύλʔϯʱ
ຊ
lઃܭͦͷϓϩδΣΫτͷཁ݅νʔϜنɺܦݧͳͲʹΑͬ ͯࠨӈ͞Ε·͢ɻ͜ͷઃܭύλʔϯ͕ઈରʹͯ·Δͱ͍ ͏ɺ͍ΘΏΔۜͷؙ͋Γ·ͤΜɻz
lࣄલʹݻఆԽ͞ΕͨϚελʔϓϥϯʹै͏ͷͰͳ͘ɺͦͷ ࣌ʑͷঢ়گʹ߹Θͤͯॊೈʹमਖ਼ɺ෮ݪɺ֦ுɺվળ͢Δ͜ͱ ͕ॏཁz Christopher Alexander
ܞΘ͍ͬͯΔ ϓϩμΫτʹͱͬͯϕλʔͳ ઃܭͱͳΜͩΖ͏ʜ
έʔεόΠέʔε ΈΜͳݴ͍ͬͯΔ͠ʜ
ࠓ͕͍ࣗͬͯΔநԽ ྑ͍ํɺਖ਼͍͠ํʹ ͔͍ͬͯΔͷͩΖ͏͔ʁ
ͦΜͳͱ͖ʜ
lϩʔϚ࣌ͷΤϯδχΞɺ ࣗͷݐͯͨڮͷԼͰ ͠Β͘ա͝͞ͳ͚ΕͳΒͳ͔ͬͨɻz ʰ੬ऑੑʦԼʧʕʕෆ࣮֬ͳੈքΛੜ͖ԆͼΔ།Ұͷߟ͑ํʱɹφγʔϜɾχίϥεɾλϨϒ ݄Ӵ ઍ༿හੜॱ
ڮͷԼͰ৸ͯΔ͕ࣗ ͨͲΓண͍ͨઃܭ େʹ͍͍ͯ͠ઃܭ
͕ࣗݐͯͨ ڮͷԼͰ͑ͯΒͳ͍ͨΊʹʜ
͜Μͳʹศརʂ ʰJ04ΞϓϦઃܭύλʔϯೖʱ
lγϯϓϧͳγεςϜ͔ΒਐԽͯ͠ෳࡶͳγεςϜ͕ੜ·ΕΔͷɺ ҆ఆͨ͠தؒతͳܗଶ͕͋Δͱ͖͚ͩͰ͢ɻ݁Ռͱͯ͠ੜ·ΕΔ ෳࡶͳܗଶɺඞવతʹώΤϥϧΩʔͷ͋ΔͷʹͳΓ·͢ɻz ੈքγεςϜͰಈ͘ʕ͍·ى͖͍ͯΔ͜ͱͷຊ࣭Λ͔ͭΉߟ͑ํυωϥɾ̝ɾϝυζ ࢬኍ३ࢠ খాཧҰॱ
ෳࡶ͞ ʰγϯϓϧͳதؒঢ়ଶʱͷ Έ߹ΘʹΑΓ͛͠ΒΕΔ
ઃܭ 㲈 ύλʔϯԽͱύλʔϯͷ֊Խ Ͱෳࡶ͞ΛΓ͜ͳ͍ͯ͘͠
Christopher Alexander
ύλʔϯɾϥϯήʔδతͳະདྷΛͭ͘ΔͨΊͷݴޠ ϦΞϦςΟɾϓϥε Ҫఉਸ ஶ ฤू த೮ത ஶ தฏଂ
ஶ ߐߒҰ ஶ தହਓ ஶ ӋੜాӫҰ ஶ IUUQXFCTGDLFJPBDKQdJCBQBQFST1631-40$@1SPQFSUJFTQEG
IUUQTXXXTMJEFTIBSFOFUUBLBTIJJCBUIFOBUVSFPGPSEFS
छྨͷ ઃܭͷύλʔϯ छྨͷநతͳঢ়ଶ
6*,JU IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO$PDPB$PODFQUVBM$PSF"OJNBUJPO@HVJEF *OUSPEVDUJPO*OUSPEVDUJPOIUNMBQQMF@SFGEPDVJE51
ෳࡶ͞ΛΓ͜ͳ͢ʹ ʰγϯϓϧͳதؒঢ়ଶʱ͕ඞཁ
ઃܭύλʔϯ 㲈 ʰγϯϓϧͳதؒঢ়ଶʱͱ ͦͷ͍ํͷΧλϩά
J04ઃܭύλʔϯͷཱͪҐஔ 4XJGUͷදݱ Ϗδωεཁٻ ʹର͢Δදݱ ϥΠϒϥϦ044܈ ઃܭύλʔϯ
Ұൠతͳઃܭύλʔϯͷٞ 4XJGUͷදݱ Ϗδωεཁٻ ʹର͢Δදݱ ϥΠϒϥϦ044܈ ઃܭύλʔϯ
ʰJ04ઃܭύλʔϯೖʱͷٞͷΧόϨοδ 4XJGUͷදݱ ϥΠϒϥϦ044܈ Ϗδωεཁٻ ʹର͢Δදݱ ઃܭύλʔϯ
ͱ͓ͯ͢͢Ίʂ ʰJ04ΞϓϦઃܭύλʔϯೖʱ
ЋͰ ࣮ͰͷઃܭͷΛ͠·͢ɻ
lઃܭͦͷϓϩδΣΫτͷཁ݅νʔϜنɺܦݧͳͲʹΑͬ ͯࠨӈ͞Ε·͢ɻ͜ͷઃܭύλʔϯ͕ઈରʹͯ·Δͱ͍ ͏ɺ͍ΘΏΔۜͷؙ͋Γ·ͤΜɻz
w Ϗδωεతͳཁ݅ w جຊతͳອըΞϓϦΛϕʔε w Ϗδωε্ͷΞϓϩʔνఆ·͓ͬͯΒͣࢼߦࡨޡΛ܁Γฦ͢ඞཁ͕͋Δɻ w نɾظؒ w ࣾνʔϜdਓ
J04 "OESPJE αʔόʔαΠυ σβΠϯ $4 1. 10 w ࠓޙؔΘΔͰ͋Ζ͏ϓϩμΫτ w ٕज़తͳഎܠ w ͜ͷϨϕϧͷنͷͷΛҰਓͰอकɾ։ൃ͢Δͷॳ w ్த͔ΒҾ͖ܧ͗ 1BMDZͷഎܠɺ͋ΏΈ
খن ظత /PUΤΩεύʔτ
ϕʔε.77.
w 7JFX.PEFM 7JFX$POUSPMMFSʹґଘੑΛͲ͏ͬͯೖ͢Δ͔ʁ w Ͳ͏ͬͯ7JFX$POUSPMMFSͱ7JFX.PEFMΛCJOE͢Δ͔ w 7JFX.PEFM͕ͲͷΑ͏ʹσʔλʹΞΫηε͢Δͷ͔ʁ w ͲͷΑ͏ʹͯ͠ςελϏϦςΟΛ୲อ͢Δͷ͔ʁ w
൚༻తͳ-PBEJOHɺΤϥʔΛͲ͏ͬͯڞ௨Խ͢Δ͔ w FUDʜ .77.ͰΑΓΑΓܗΛٻΊͯมԽ͍ͯͬͨ͠
ʮਐతʯ Christopher Alexander
w θϩΠνͰͳ͘ɺྑ͍ܗʹΉ͚ͯঃʑʹҠߦͰ͖Δ͜ͱ w ҰਓͷνʔϜͰҰؾʹશ෦ॻ͖͑Δͷݱ࣮తͰͳ͍ w ࢼߦࡨޡ͠ɺݟ͕ੵͰ͖ΔΑ͏ͳঢ়ଶ ਐత
ʰਐతʱʹରͯ͠ ศརͩͬͨͭͷ5JQT
5JQT ϓϩδΣΫτΛॎʹׂΔʂ 5JQT ઃܭͷ׳Β͠ͱͯ͠ͷ#-P$ύλʔϯ
5JQT ϓϩδΣΫτΛॎʹׂΔʂ
ProjecctRoot ViewController ViewModel StoryBoard ComicDetailsViewController.swift ComicDetailsViewModel.swift SearchViewModel.swift SearchViewController.storyboard
SearchViewController.swift ComicDetailsViewController.storyboard ProjecctRoot ComicDetails Search ComicDetailsViewController.swift ComicDetailsViewModel.swift ComicDetailsViewController.storyboard … ԣׂΓͷϑΥϧμߏ ॎׂΓͷϑΥϧμߏ
w ࠷ॳ7JFX.PEFMͰ4FTTJPOΛͰѻ͍ͬͯͨˠςετ͕ॻ͖ͮΒ͍ w 'MVYΛϕʔεʹɺϦΫΤετঢ়ଶͷ4UPSFͱϦΫΤετͷ%JTQBUDIFSΛͭͬͯ͘%*͢Δ Α͏ʹˠCPJMFSQMBUF͕૿͑͗ͯͭ͢Β͍ w 3FQPTJUPSZΛͭͬͯ͘(FOFSJDTΛ׆༻ͯ͠%*͢ΔΑ͏ʹ 7JFX.PEFMͷѻ͍ํ͕มભ͍ͯͬͨ͠
w ͲΕ͕࠷৽͕Θ͔Βͳ͍ w ӨڹൣғɺదԠൣғ͕Θ͔Βͳ͍ɻ w ํΛॻ͘ͱͨ͠ΒผͰ͔ͬ͠Γͱ·ͱΊͳͯ͘ͳΒͳ͍ ͦΜͳதͰͷԣׂΓͷਏ͞
ॎׂΓʹ͢Δͱ খ͞ͳվળ ৽͍͠ͷͷಋೖʹ༰ʹʜ
$IBOHF-PHͱରԠ͕औΓ͍͢
3&"%.&Λஔ͘͜ͱ͕Ͱ͖Δ ProjecctRoot ComicDetails Search ComicDetailsViewController.swift README.md ComicDetailsViewModel.swift ComicDetailsViewController.storyboard
…
৽͘͠ೖ͖ͬͯͨਓʹɺ ࠓͷͱ͜Ζͷ࠷ળҊ ݱঢ়Λ͍͑͢
5JQT ઃܭͷ׳Β͠ͱͯ͠ͷ#-P$ύλʔϯ
#VTJOFTT-PHJD$PNQPOFOU ˣ #-P$
ݶఆతͳൣғʹ͓͍ͯ ϏδωεϩδοΫΛղܾ͢Δ ίϯϙʔωϯτΛ࡞Δ
#VJMESFBDUJWFNPCJMFBQQTXJUI'MVUUFS (PPHMF*0`
ʰখ͘͞ಋೖʱͰޮՌΛ࣮ײͰ͖Δ Φʔόʔϔουͷগͳ͍ Φεεϝͷύλʔϯ
PlacePicker Form OK Name Place
w ໊લͱॴΛߋ৽Ͱ͖Δ w ॴ͕ຊ͡Όͳ͍ͱૹ৴Ͱ͖ͳ͍ w ໊લ͕ۭจࣈͩͱૹ৴Ͱ͖ͳ͍ ϏδωεϩδοΫ
OK Name Place PlacePicker Form FormBLoC
OK Name Place PlacePicker Form FormBLoC GVODVQEBUF/BNF UPOFX/BNF4USJOH
WBSOBNF0CTFSWBCMF4USJOH\HFU^ WBSQMBDF0CTFSWBCMF$(1PJOU\HFU^ WBSJT7BMJE0CTFSWBCMF#PPM\HFU^ GVODVQEBUF1MBDF UPOFX/BNF$(1PJOU
OK Name Place PlacePicker Form FormBLoC GVODVQEBUF/BNF UPOFX/BNF4USJOH
WBSOBNF0CTFSWBCMF4USJOH\HFU^ WBSQMBDF0CTFSWBCMF$(1PJOU\HFU^ WBSJT7BMJE0CTFSWBCMF#PPM\HFU^ GVODVQEBUF1MBDF UPOFX/BNF$(1PJOU
FormBLoC OK Name Place WBSQMBDF0CTFSWBCMF$(1PJOU\HFU^ GVODVQEBUF1MBDF UPOFX/BNF$(1PJOU
খͯ͘͞ศརʂ
4XJGUͷදݱ ϥΠϒϥϦ044܈ Ϗδωεཁٻ ʹର͢Δදݱ ઃܭύλʔϯ
w Өڹൣғ͕ݶఆతˠଟগԼखΛͯ͠େৎͳͷͰࢼ͍͢͠ w ͱͯγϯϓϧͰΘ͔Γ͍͢ɻ w ৭ʑͳύλʔϯͷൃలͷಎΛಘ͍͢ w #-P$มԽΛٴ΅͢࡞༻ʢ"DUJPOʣͱมԽͷ؍ଌ 4UPSF ʹ͚Δˠ'MVYతʹ
w #-P$ͷঢ়ଶΛ7JFXʹόΠϯυ͢Δʹʜˠ.77..71ͷ͕͔Γ w ͲͷΑ͏ʹ7JFX7JFX$POUSPMMFSʹ#-P$Λ͍͔ͯ͘͠ˠͷؒͷ%* w #-P$Λελϒͨ͠Γɺ#-P$ͷςετΛॻ͍ͯΈΔˠΛׂͨ͠ԸܙΛ࣮ײͰ͖Δ ઃܭͷ׳Β͠ͱͯ͠#-P$ͷ͕͓͜͜͢͢Ί
·ͱΊ w ڮͷԼͰ҆৺ͯ͠৸ΔͳΒʰJ04ΞϓϦઃܭύλʔϯೖʱ w খ͘͞ظతͳϓϩδΣΫτͰ͋ΕɺਐతΛࢦͯ͠ࢼߦࡨޡ͢ΔͱΑ͔ͬͨ