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
what is model?
Search
to4iki
January 17, 2017
Technology
58
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
what is model?
"モデル"という言葉を様々な観点から考えてみる
to4iki
January 17, 2017
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
180
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.7k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.7k
ビューインプレッションの計測方法
to4iki
1
1.1k
秘伝の `gitconfig`
to4iki
1
470
Abema iOS Architecture
to4iki
12
3.6k
timetable-bot
to4iki
0
15k
BLoC Pattern Introduction with Swift
to4iki
2
1.4k
nel
to4iki
0
200
Other Decks in Technology
See All in Technology
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
300
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
310
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
180
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
280
4人目のSREはAgent
tanimuyk
0
330
【FinOps】データドリブンな意思決定を目指して
z63d
3
550
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
160
きのこカンファレンス2026_肩書きを外したとき私は誰か
yamasatimi
1
110
Why is RC4 still being used?
tamaiyutaro
0
260
Kotlin 開発のツラミを爆破した話! / Explode the difficulty of Kotlin dev!
eller86
0
130
LiDAR SLAMの実装とセンサ融合 ~Lie群からContinuous-Time LIOまで~
naokiakai
1
730
背中から、背中へ /paying forward to community
naitosatoshi
0
200
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.3k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
BBQ
matthewcrist
89
10k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Side Projects
sachag
455
43k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
The SEO identity crisis: Don't let AI make you average
varn
0
510
Transcript
Ϟσϧͱ͍͏ݴ༿ᐆດ shinjyuku.lt #3 @to4iki
People • @to4iki • GANMA!ͱ͍͏ອըͷαʔϏεΛ࡞ͬͯ·͢ • iOSɺΞʔΩςΫνϟʹڵຯ͕͋Γ·͢ • ߦͧ͘ʂ(͓͢͢Ίڭ͑ͯ͘Ε) •
ΫϦεϚεͲ͏͠Α͏ɻɻ(´ɾωɾ`)
Agenda • ͡Ίʹ • ϞσϧΛ৭Μͳ؍͔Βߟ͑ͯΈΔ • ΦϒδΣΫτࢦɺDDD…
എܠ
Ϟσϧͱ͍͏ݴ༿ᐆດ • ҙຯ͕͗͢Δ • ͨͩͷσʔλΛ֨ೲ͢Δശͱͯ͠ଘࡏ͢ΔέʔεࢁΈ͖ͯͨ • ϏδωεϞσϧ • MVC, MVVM,
MVP, DDD…ͰͷϞσϧ • αʔόʔαΠυͷϞσϧɺΫϥΠΞϯταΠυͷϞσϧ • ActiveRecord, DAO, DTO…
“ϞσϧͱԿ͔”͕ڞ༗Ͱ͖͍ͯͳ͍
ผͷྑ͍ݴ༿͕͋Εྑ͍Μ͚ͩͲɻ தʑݟ͔ͭΒͳ͍
ϞσϧͷఆٛΛগ͠Ͱɺ ͖ͬΓͱ͍ͤͨ͞
༷ʑͳΓޱ͔Βߟ͑ͯΈΔ • semantics: Ϟσϧͷҙຯ • expression: Ϟσϧͷදݱ • utility: Ϟσϧͷ༗ޮੑ
• target: Ϟσϧͷର
Ϟσϧͱ (ࣗͳΓͷղऍͳͷͰؒҧͬͯΔՄೳੑ͕͋Γ·͕͢ɺ͓खॊΒ͔ʹ)
͍ͬͺ͍Ҿ༻ͨ͠ ؤுΔͧ
ͱ͍͑ɺ ݀ͩΒ͚͔ͩΒ͠ʹདྷͯ΄͍͠
ݩདྷͷҙຯͰͷϞσϧ • ݟຊɺखຊɺൣɺܗ(ϞσϧϧʔϜ) • ੍࡞ͷૉࡐͷର(ਓըͷʙ) • ෳࡶͳݱΛઆ໌͢ΔͨΊʹ༻͍ΒΕΔ୯७Խͨ͠ཧԾઃ • খઆͳͲͷొͷૉࡐͱͳ࣮ͬͨࡏͷਓɺΞχϝͷ •
ϑΝογϣϯϞσϧͷུ ूӳࣾ ࠃޠࣙయ
͜Ε͕Ϟσϧͩʂ
ࢥߟͱͯ͠ͷϞσϧ(1/2) • ϞσϧҙਤΛઆ໌͢Δଘࡏ • ࣝΛཁͨ͠γϯϓϧͰ͔Γ͍͢આ໌ • ෳࡶͳͷ͝ͱΛγϯϓϧʹදݱͨ͠ͷ(ܕ͕ Ϟσϧ) • ϞσϧΛ࡞Δͱࢥߟ͢Δͷ྆ྠΛճ͍ͯ͘͠ͷ͕
ϞσϧԽ • ཁૉɾࣄΛͲͷΑ͏ʹׂ͢Δ͔ɺؔੑ͔Β நԽɾ۩ମԽΛߟ͑ͲͷΑ͏ʹόϥ͍͔ͯ͘͠ɺ όϥͨ͠ཁૉ͔ΒͲͷΑ͏ʹશମΛదʹઆ໌Ͱ ͖ΔΑ͏ʹͳΔ͔ͷԟ෮ӡಈ(ࢥߟ)͕ͦ͜Ϟσϧ ࡞Γͷຊ࣭
ࢥߟͱͯ͠ͷϞσϧ(2/2) • ϞσϧΛ࡞Δͱɺ࿙Εͳ͘ɺॏͳΓͳ͘ ࣄ͕ཧ͞Ε͍ͯΔ͜ͱ͕֬ೝ ͘͢͠ͳΔ • ແବͳใΛͦ͗མͱ͠ࣄΛγϯϓϧʹදݱͰ͖Δ == શମΛཧղ͠၆ ᛌ͢Δ͜ͱʹͭͳ͕Δ
• ྨਪͯ͠࿈͢ΔࣄͰɺൃΛ͛Δ͜ͱ͕Ͱ͖Δ
OOͰͷϞσϧ(1/2) • OOPਓؒͷਫ਼ਆΛ֦ுͨ͠ͷ • OOਓʑͱͦͷϝϯλϧϞσϧʹؔ͢ΔͷͰ͋ΓɺϙϦϞϑΟζϜ ݁߹ɾڽूʹؔ͢ΔͷͰͳ͍ • OOPʹΑͬͯιϑτΣΞΛ࡞͢Δͱ͍͏͜ͱɺݴ͍͑ΕϞ σϧΛ࡞͢Δ͜ͱ =
ϞσϧΛదʹ࡞Ͱ͖͍ͯͳ͍ͷOOPͱݺ ͳ͍ • “σʔλ”ͱ”ৼΔ͍”Λ࣋ͭଘࡏ • ΦϒδΣΫτޓ͍ʹϝοηʔδΛૹΓ߹͏͜ͱͰɺޓ͍ͷৼΔ͍ Λ࣮ߦ͢Δ(ϝοηʔδύογϯά)
OOPͷ৴ 1. ϝοηʔδύογϯά 2. ΦϒδΣΫτಉ࢜ͷִ(isolation) • ࢲͷϓϩάϥϜ͕͋ͳͨͷϓϩάϥϜΛഁյͯ͠͠·Θͳ͍ͱ͍͏͜ͱ 3. ϙϦϞϑΟζϜ •
རศੑͷҝɺϝοηʔδͷૹΓํΛڞ௨ʹ͢Δ
OOͱݱ࣮ੈքશવҧ͏ • ΦϒδΣΫτࢦݱ࣮ੈքΛͦͷ··ιϑτΣΞʹදݱ͢Δٕज़ͱ͍͏આ໌ؒ ҧ͍ 1. ݱ࣮ੈքઌʹ۩ମతͳͷ͕͋ΓɺͦΕΛ༷ʑͳج४Ͱྨ͢Δ 2. ݱ࣮ੈք࣌ؒ࣠ίϯςΩετͰRole͕มԽ͍ͯ͘͠(OOPͰ1छྨͷΫϥ ε͔ΒΠϯελϯε͕࡞ΒΕΔ) 3.
ݱ࣮ੈքݸਓݸਓ͕ҙࢥΛ࣋ͬͯࣗ༝ʹಈ͘ɺOOPͷΠϯελϯε֎෦͔ Βͷࢦ͕ࣔͳ͍ݶΓ͔ࣗΒಈ͘ࣄͳ͍ɺ͋Β͔͡ΊܾΊΒΕͨࣄΛͦͷ௨ Γʹ͔࣮͠ߦͰ͖ͳ͍ • ݱ࣮ੈքͷҰ෦ΛݞΘΓ͢Δ͚ͩͰɺݱ࣮ੈքͦͷͷΛදݱ͢ΔΘ͚Ͱͳ͍ • ݱ࣮ΛදݱͰ͖Δͷ͋͘·Ͱ੩తϞσϧ(֓೦Ϟσϧ)·ͰͰ͋ΓɺಈతϞσϧ( ཧϞσϧ)ݱ࣮ͱͷྨࣅੑ͋·Γͳ͍
OOͰͷϞσϧ(2/2) • OOɺੳʹجͮ͘Ϟσϧ(ʹղऍ)هड़ͷҰൠతख๏Λࢧԉ͢Δ • ରΛཧղ͢ΔͨΊʹɺཁૉΛղ • ߏཁૉ͕ΦϒδΣΫτ • ߏཁૉؒͷؔΦϒδΣΫτͷؔ࿈ •
֊ཧղΧϓηϧԽͱͯ͠ද͢ • ಈతͳৼΔ͍implementationʹԡ͚͠Δ(ղܾͰ͖͍ͯͳ͍?) • OOͷϞσϧݱ࣮ੈքͷ֓೦(੩త)Λදݱͨ͠ଘࡏ
MVC͔ΒݟͨϞσϧ • MVCͩΖ͏͕ɺMVP, MVVM, MVI…ͩΖ͏͕ϨΠϠʔΛͨ͠ΞʔΩςΫ νϟͷతͷҰͭϞσϧΛִ͢Δͱ͍͏ࣄ • MΞϓϦέʔγϣϯͷதͰͷϏδωεϩδοΫΛ୲͢Δɺ͍ΘΞϓϦ έʔγϣϯͷຊମ෦ɺຊ࣭ʹͨΔ •
Mೖग़ྗදࣔͱ͍ͬͨॲཧΛߦ͏͜ͱͰ͖ͳ͍ • Mٕज़ʹґଘ͠ͳ͍Plainͳଘࡏ(POJO, PORO)Ͱ͋Δ͖ • ActiveRecord ͡ΊORMͦΕࣗମ͋͘·ͰMΛࢧ͑ΔͷͰ͋ͬͯ MͰͳ͍ • ۃɺGUI/CUI/WebAppͰมΘΒͳ͍ॲཧ͕͋ΔͳΒͦΕMͷࣄ
DDDͷࢹ
DDDͱ • Domain-Driven Design • υϝΠϯϞσϧΛத৺ʹߟ͑Δઃܭࢥ • DDDݴ༿Λେʹ͢Δઃܭࢥ • XP(ΠϯΫϦϝϯλϧͳઃܭ)
+ OO(ΦϒδΣΫτࢦ) • OOͷຊҙΛܧঝͨ͠··࣮ફͨ͠ͷ͕DDD • ܾͯ͠৽͍͠ͷͰͳ͍ɺۜͷؙͰͳ͍ • ίϛϡχέʔγϣϯίετ͕ߴ͍(ਓ͕ଟ͍)ͱ͜DDD͕අ༻ରޮՌ͕ߴ ͍͔
DDDͷత ιϑτΣΞͷ֩৺ʹ͋Δ ෳࡶੑͱಆ͏͜ͱ
DDDͷҙٛ • ͜Ε·ͰɺϞσϧͱσʔλͷೖΕͰɺͦΕΛૢ࡞ͯ͠खଓ͖Λ࣮ݱ ͢ΔαʔϏεΛ࣮͢Δɺͱ͍͏ٕज़ۦಈͳߟ͑ํ͕த৺ͩͬͨ(τϥϯ βΫγϣϯεΫϦϓτ) • υϝΠϯۦಈͰɺυϝΠϯϞσϧ͕ࣔ͢ߟ͑ํΛ֩৺ʹ͢ΔɻDDDͰ ͜ͷΛ୲͏ΦϒδΣΫτ܈Λڧௐಈ࡞ͤ͞Δ͜ͱΛલఏͱ͍ͯ͠Δɻ • OOͷϞσϧ֓೦Λࣔ͢ͷɻDDDͰɺϞσϧ=ߟ͑ํͱίʔυΛΑ
Γີʹ݁ͼ͚ͭͨιϑτΣΞΛ࣮ݱ͢Δ
υϝΠϯͱ • ιϑτΣΞΛར༻͢Δਓͨͪͷ”׆ಈ”ͱ”ؔ৺ࣄ" == ৫͕ߦ͏ࣄۀͦΕΛऔΓר͘ੈքͷ͜ͱ == ۀྖҬ • ։ൃऀͰͳ͘ར༻ऀͷݴ༿Ͱදݱ͢Δ •
“ιϑτΣΞͷ֩৺υϝΠϯʹؔͨ͠Λ ϢʔβͷͨΊʹղܾ͢ΔೳྗͰ͋Δ”
υϝΠϯϞσϧͱ • υϝΠϯϞσϧಛఆͷਤͰͳ͘ɺਤ͕͑Α͏ͱ͢Δ ߟ͑ํͰ͋Δ • ͦͷ͕ࣝݫີʹߏ͞Εɺબͼൈ͔ΕͯநԽ͞Ε ͨͷ • ϞσϧͱɺϓϩδΣΫτʹܞΘΔਓʑͷ಄ͷதͰߏங͞ Εͨ֓೦ͷू·ΓͰ͋ΓɺυϝΠϯʹ͍ͭͯͷಎΛө
ͨ͠ɺ༻ޠͱ֓೦ͷؔੑ͔ΒͰ͖͍ͯΔ • Ϟσϧͱબͼൈ͔Εγϯϓϧʹ͞ΕɺҙਤతʹΈཱͯ ΒΕͨࣝͷදݱܗࣜͰ͋ΔɻదͳϞσϧใͷ࣋ͭ ҙຯΛ໌Β͔ʹ͠ɺͦͷใΛʹूதͤ͞Δ • υϝΠϯϞσϧྖҬΛදͨ͠ͷ(υϝΠϯϞσϧ ͚ͩͰػೳཁٻΛຬͨ͢͜ͱ͕Ͱ͖ͳ͍) • υϝΠϯϞσϧར༻ऀ(ϝϯλϧ)ͷؔ৺ຖͷܕ
υϝΠϯϞσϧͷՁ 1. Ϟσϧͱઃܭͷ֩৺͕૬ޓʹܗ͠߹͏ 2. ϞσϧνʔϜϝϯόશһ͕༻͢Δݴޠͷج൫Ͱ͋Δ 3. Ϟσϧৠཹ͞ΕͨࣝͰ͋Δ
ϢϏΩλεݴޠ • ͍ͭͰɾͲ͜Ͱɾ୭Ͱ͑Δݴ༿ • υϝΠϯΤΩεύʔτιϑτΣΞ։ൃऀΛؚΊͨνʔϜશମͰ࡞Γ্ ͛Δڞ༗ݴޠ • ϢϏΩλεݴޠͷޠኮυϝΠϯϞσϧͦͷৼΔ͍ʹඥͮ͘Ұ؏ͨ͠ ݴޠΛఆٛͯ͠ɺ։ൃνʔϜ/PO/ސ٬ͱͷίϛϡχέʔγϣϯΪϟοϓΛ ຒΊΔ
ϢϏΩλεݴޠ σβΠϯύλʔϯ ٕज़༻ޠ ઐత Ϗδωε༻ޠ
ڥք͚ͮΕͨίϯςΩετ(1/2) • υϝΠϯۭؒͱղܾۭؒΛ͍࣋ͬͯΔ • ۭؒ: ղܾ͖͢Ϗδωεઓ্ུͷ՝Λු͖ ூΓʹ͢Δͷ • ղܾۭؒ: ιϑτΣΞΛͲͷΑ͏ʹ࣮ͯͦ͠ͷ
՝Λղܾ͢Δ͔ʹ͢Δͷ(ڥք͚ΒΕͨ ίϯςΩετ) • ڥք͚ͮΕͨίϯςΩετ໌ࣔతͳڥքͰ͋Γɺυϝ ΠϯϞσϧ͕Ͳ͜ʹଐ͢Δ͔Λද͢ͷ • ex. จ຺͕நԽ͞Εͨͷ͕ه߸ɻจ຺͕ڞ༗͞Εͯ ͍ͳ͍ͱҙຯΛղऍͰ͖ͳ͍ɻͦͷจ຺͕ͦ͜ڥք͚ ΕͨίϯςΩετ
ڥք͚ͮΒΕͨίϯςΩετ(2/2) • ݴ༿ͷڥքΛؾʹ͢Δ(จ຺ʹΑͬͯಉ͡ϞϊͰҙຯ͕ҧ͏) • ڥք͚ͮΒΕͨίϯςΩετͷओతɺϢϏΩλεݴޠͦͷυϝΠϯ ϞσϧΛΧϓηϧԽ͢Δ͜ͱ • DDDͰಉ໊͡લͰBC͕ҟͳΕɺҟͳΔϞσϧͱͯ͠ఆٛ͢Δ
Ϟσϧۦಈઃܭ(1/2) • ͔࣍Β࣍ͱػೳΛຬͨ͢ίʔυΛ࡞͢Δ͚ͩͷϓϩδΣΫτɺࣝ ͷטΈࡅ͖ͱίϛϡχʔέʔγϣϯʹ͓͚ΔԸܙΛ΄ͱΜͲड͚ͳ͍ • ͕ى͖ΔͷɺϞσϧۦಈઃܭʹ͓͍ͯ݁ͼ͚ͭͯߟ͍͑ͯΔ2ͭͷ ࡞ۀɺϞσϦϯάͱ࣮Λͯ͠͠·ͬͨ࣌ • ઃܭ͕͋Δ͍ઃܭͷத৺ͱͳΔ෦͕ɺυϝΠϯϞσϧʹඥ͍͍ͮͯͳ ͍ͳΒɺͦͷϞσϧʹ΄ͱΜͲՁͳ͘ɺιϑτΣΞ͕ਖ਼֬Ͱ͋Δ
͔Ͳ͏͔ٙΘ͍͠ɻಉ͡Α͏ʹɺϞσϧͱઃܭ͞Εͨػೳͱͷඥ͚͕ͮ ෳࡶͩͱཧղ͢Δͷ͕͘͠ɺ࣮ࡍʹɺઃܭ͕มߋ͞Εͨ࣌ʹඥ͚ͮΛ ҡ࣋Ͱ͖ͳ͘ͳΔ
Ϟσϧۦಈઃܭ(2/2) • ඥ͚͕໌Β͔ʹͳΔΑ͏ʹɺυϝΠϯϞσϧΛจࣈ௨ΓͷҙຯͰ࣮ʹ өͤ͞Δ͜ͱɻϞσϧʹ͍ͭͯ࠶ݕ౼͠ɺΑΓࣗવʹιϑτΣΞʹ࣮ ͞ΕΔΑ͏ʹमਖ਼͢Δ͜ͱ • ίʔυϞσϧͷදݱͱͳΔ͔Βɺίʔυʹର͢ΔมߋϞσϧʹର͢Δ มߋʹͳΔ͔͠Εͳ͍ɻͦͷӨڹɺϓϩδΣΫτͷଞͷ׆ಈશମͱ దٓΘ͍͔ͬͯͳ͚ΕͳΒͳ͍
TPS͔Β • શͯͷ࡞ۀऀ͕ੜ࢈ϥΠϯશମʹΛ࣋ͭɻܽ ؕΛݟ͚ͭͨΒɺඥΛҾͬுͬͯɺϥΠϯΛࢭΊΔɻ ͦ͏ͯ͠ɺϥΠϯͷશһͰͷࠜຊݪҼΛൃݟ͠ ͦΕΛमਖ਼͢Δ
Ϟσϧ(ۀ)ʹΛ࣋ͱ͏ Ϟσϧ(ۀ)Λߟ͑ଓ͚Α͏
·ͱΊ • Ϟσϧ/ۀྖҬ • Ϟσϧ֓೦Λࣸ͠औΔखஈ • ϞσϧେͳࣝΛཁͨ͠γϯϓϧͰΘ͔Γ͍͢આ໌ • ͕ࣗͨͪܞΘΔۀʹڵຯɺɺਅʹऔΓΉ͜ͱͰɺΑΓྑ͍Ϟ σϧ͕ੜ·ΕΔ
See also(links) • ϞσϧͱԿ͔ʁ http://dse.ssi.ist.hokudai.ac.jp/~onosato/lectures/DSE19/H19-Model.pdf • ΦϒδΣΫτࢦͱ10ઓͬͯΘ͔ͬͨ͜ͱ http://qiita.com/tutinoco/items/ 6952b01e5fc38914ec4e •
ϨΠϠʔઃܭͱ͔ɺΦϒδΣΫτࢦͱ͔ɺDDDͱ͔ɺͦͷล http://mattun.hatenablog.com/ entry/2014/07/19/135320 • OO੩తߏΛɺؔܕಈతৼΔ͍ΛϞσϧԽ͢Δͷʹ༗༻ͩͱ͍͏ɹhttp:// tanakakoichi9230.hatenablog.com/entry/3741984190 • ʮMVCͷצҧ͍ʯʹ͍ͭͯɺ͏Ұߟ͑ͯΈΔ http://at-grandpa.hatenablog.jp/entry/2013/11/ 01/072636 • FiNC DDDୈҰճษڧձ http://www.slideshare.net/hirokishigemura9/ruby-ddd • ϞσϦϯά͠ͳ͍ͰXPͱԿࣄͩ http://www.slideshare.net/iwaoRd/xp-20150912
See also(links) • ϦΞΫςΟϒDDD https://speakerdeck.com/j5ik2o/riakuteibuddd?slide=23 • GANMA!ͰDDDΛͬͯΈ͔ͯΒ1͘Β͍ܦͬͨ http://www.slideshare.net/ yasuyukisugitani/septeni-scala3 •
DCIΞʔΩςΫνϟʹ͍ͭͯޠͬͯΈΔΑ http://uehaj.hatenablog.com/entry/20100528/ 1275011951 • ͦͷޙͷJoe ArmstrongͷΦϒδΣΫτࢦʹର͢Δݟղ http://qiita.com/lambda-knight/ items/a33feffe947a958a2d3a • DCIΞʔΩςΫνϟͷཧͱGrailsʹΑΔ࣮ http://d.hatena.ne.jp/digitalsoul/20101110/ 1289315452)
See also(books) • εʔύʔϓϩάϥϚʔʹֶͿ ࠷ڧγϯϓϧࢥߟज़ • ΦϒδΣΫτࢦͰͳͥͭ͘Δͷ͔ • ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ •
࣮ફυϝΠϯۦಈઃܭ • ΤΫετϦʔϜϓϩάϥϛϯά • τϤλੜ࢈ํࣜ
Any Questions?