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
ふんわりと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
FastMCPでMCPサーバー/クライアントを構築してみる
ttnyt8701
2
130
try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう
kajitack
3
490
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
yuukit
3
730
人には人それぞれのサービス層がある
shimabox
3
660
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
10
1.7k
Practical Tips and Tricks for Working with Compose Multiplatform Previews (mDevCamp 2025)
stewemetal
0
120
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
1
520
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
16
3.6k
Bytecode Manipulation 으로 생산성 높이기
bigstark
1
190
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
0
2.8k
RubyKaigi Hack Space in Tokyo & 函館最速 "予習" 会 / RubyKaigi Hack Space in Tokyo & The Fastest Briefing of RubyKaigi 2026 in Hakodate
moznion
1
130
Agent Rules as Domain Parser
yodakeisuke
1
530
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A designer walks into a library…
pauljervisheath
206
24k
Unsuck your backbone
ammeep
671
58k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
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͡Όͳ͘ͱڞ௨ͷݴޠΛ༻͍ͯ ઃܭ͢Δ͜ͱ͕ઃܭख๏ͷΤοηϯεͱͯ͠ ෯͘༗༻ͦ͏