Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
橋の下で安心して寝るための 『iOSアプリ設計パターン入門』
Search
kameike
January 15, 2019
Technology
0
2.1k
橋の下で安心して寝るための 『iOSアプリ設計パターン入門』
kameike
January 15, 2019
Tweet
Share
More Decks by kameike
See All by kameike
LeanScrum
kameike
3
1.2k
サポートを求めてAppleに電話するまでの道のり
kameike
4
2.1k
header-comment
kameike
5
1.5k
Farewell SnapKit
kameike
1
1.8k
Other Decks in Technology
See All in Technology
MLflowダイエット大作戦
lycorptech_jp
PRO
1
140
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
170
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
750
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
130
Lessons from Migrating to OpenSearch: Shard Design, Log Ingestion, and UI Decisions
sansantech
PRO
1
140
ディメンショナルモデリングを支えるData Vaultについて
10xinc
1
100
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
2
200
品質のための共通認識
kakehashi
PRO
3
260
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
690
Debugging Edge AI on Zephyr and Lessons Learned
iotengineer22
0
220
シニアソフトウェアエンジニアになるためには
kworkdev
PRO
3
170
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
210
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Embracing the Ebb and Flow
colly
88
4.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Being A Developer After 40
akosma
91
590k
Code Reviewing Like a Champion
maltzj
527
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Designing Experiences People Love
moore
143
24k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
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 খ͘͞ظతͳϓϩδΣΫτͰ͋ΕɺਐతΛࢦͯ͠ࢼߦࡨޡ͢ΔͱΑ͔ͬͨ