Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ふんわりとDDD実践してみた
Search
tenmihi
March 09, 2019
Programming
0
370
ふんわりとDDD実践してみた
Fukuoka Perl Workshop #28 で発表しました
tenmihi
March 09, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
530
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
110
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
770
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
180
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
4.9k
React Native New Architecture 移行実践報告
taminif
1
140
[堅牢.py #1] テストを書かない研究者に送る、最初にテストを書く実験コード入門 / Let's start your ML project by writing tests
shunk031
12
7k
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
170
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
3
1.3k
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
210
AIコーディングエージェント(Manus)
kondai24
0
140
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.2k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Become a Pro
speakerdeck
PRO
30
5.7k
The Cult of Friendly URLs
andyhume
79
6.7k
Code Reviewing Like a Champion
maltzj
527
40k
Optimizing for Happiness
mojombo
379
70k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
A better future with KSS
kneath
240
18k
KATA
mclloyd
PRO
32
15k
Scaling GitHub
holman
464
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Transcript
;ΜΘΓͱDDD࣮ફͯ͠Έͨ Fukuoka Perl Workshop #28 - tenmihi
ࣗݾհ • tenmihi (ͯΜΈͻ) • גࣜձࣾϞόΠϧϑΝΫτϦʔ • Perl, JS •
20189݄͔Β࡚Ͱ ϑϧϦϞʔτͯ͠·͢
͓͢Δ͜ͱ • ࠷ۙDDDΛ࣮ફͨ͠ͷͰͦΕʹ͍͓ͭͯΛ • ઓུతͳͱ͜ΖίϯςΩετਂ͗͢ΔͷͰ υϝΠϯϞσϧͷߏஙʹؔͯ͠ͷΈ৮Ε·͢
΄ͱΜͲPerlཁૉ͋Γ·ͤΜ
ࣗͷόοΫάϥϯυ • ࠓ·ͰαʔϏεͷӡ༻ΛόϦόϦͬͯͨ • େ͖ΊͷઃܭʹͪΌΜͱ͖߹ͬͨͷ ࠓճ͕ॳΊͯ
ͲΜͳϓϩδΣΫτ • طଘαʔϏεͷཧը໘ • ࣾͰ͏ͷͰެ։͢ΔͷͰͳ͍ • ӡ༻ʹؔ͢ΔಛఆͷۀϑϩʔΛࢧԉ͢Δ • 8ׂ΄Ͳ։ൃ͕ऴΘͬͯগ͠ͷظؒܦ͍ͬͯͨ
Γ2ׂͷ։ൃΛߟ͕͑ͨ • ͕࣌ܦͪӡ༻νʔϜͷϝϯόʔมΘͬͯ ۀϑϩʔมΘͬͨ • ։ൃ్தͷՌ৽͍͠ۀϑϩʔʹ ߹Θͳ͘ͳ͍ͬͯͨ
ཁ݅ͷ֬ೝɾઃܭʹ ཱͪͬͯ։ൃ͢͜͠ͱʹ
DDDΛ࠾༻ͨ͠ཧ༝ • ઃܭख๏ͷதͰϝδϟʔͰྑͦ͞͏ͱ͍͏ओ؍ • ͱͱ͕DDDʹ͍ۙख๏Ͱઃܭ͞Ε͍ͯͨͨΊ • ࣾͰDDDͷ࣮ફྫ͕গͳ͘ɺ࣮ફͷྑ͍ػձ ͩͱߟ͑ͨͨΊ
࣮ફͨ͠༰
υϝΠϯϞσϧͷߏஙखॱ 1. ۀϑϩʔͷ֬ೝ 2. ۀͷؔ৺ࣄʹ͍ͭͯௐΔ 3. νʔϜͰυϝΠϯϞσϧͷਫ਼ࠪ
ۀϑϩʔͷ֬ೝ • σΟϨΫλʔͱҰॹʹۀϑϩʔΛ֬ೝ • Ҏલͷ࣮֬ೝͭͭ͠ۀϑϩʔͷมԽѲ
ۀͷؔ৺ࣄʹ͍ͭͯௐΔ • ରͱͳΔαʔϏεͷTableΛͱʹચ͍ग़͠ • ͍͘Β͔࣮ࡁΈͩͬͨ͜ͱ͋Γɺ ઌʹܰ͘ϞσϧΛॻ͍ͯUMLͰు͖ग़ͨ͠
ۀͷؔ৺ࣄʹ͍ͭͯௐΔ package Fugafuga; use Mouse; has name_en => ( isa
=> Str ); has timestamp => ( isa => Int ); has item => ( isa => PiyoPiyo ); package Piyopiyo; use Mouse; has title => ( isa => Str ); has description => ( isa => Str );
νʔϜͰυϝΠϯϞσϧͷਫ਼ࠪ • ༻ޠදΛݩʹϢϏΩλεݴޠΛɺ ੜͨ͠UMLΛݩʹϞσϧͷؔΛ֬ೝͨ͠ • νʔϜϝϯόʔ୭ͰݟΕΔ&ߋ৽Ͱ͖Δ ͱ͜ΖʹυΩϡϝϯτΛஔ͍ͨ
νʔϜͰυϝΠϯϞσϧͷਫ਼ࠪ
ײͨ͜͡ͱ
ίʔυ্ͰͷදݱܾΊͨ͜ͱͰ ্࣮ͰදݱͷϒϨΛͳͤͨ͘ • ࣮αʔϏεͷ࣮Ͱͷݺͼํͱࠞͬͯ͟ ᐆດʹͳΓͦ͏ͩͬͨͷͰΑ͔ͬͨ • ͨͩɺͲ͏ͯ͠ҧײ͋ΔදݱʹͳΔ ͷ͋ΓΜͩ
ϞσϧΛϒϥογϡΞοϓ͍͢͠ ڥΛ࡞Δͷॏཁ ߋ৽͢ΔͷΊΜͲ͍͘͞ͱ͙͢͞· υΩϡϝϯτ͕ݹ͘ͳͬͯᴥᴪ͕ੜ͡Δ
ڞ௨ͷݴޠΛܾΊͯ νʔϜͰ༻͍Δ͚ͩͰ༗ӹ DDD͡Όͳ͘ͱڞ௨ͷݴޠΛ༻͍ͯ ઃܭ͢Δ͜ͱ͕ઃܭख๏ͷΤοηϯεͱͯ͠ ෯͘༗༻ͦ͏