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
ドメイン駆動設計 コンテキストマップについて
Search
honodera
February 10, 2017
Programming
0
1.1k
ドメイン駆動設計 コンテキストマップについて
社内勉強会にて発表した、
ドメイン駆動設計に全く触れたことがない人向けに作成したスライドです。コンテキストマップのみに内容を絞っています。
honodera
February 10, 2017
Tweet
Share
More Decks by honodera
See All by honodera
(なんとなくわかった気になれる)ドメイン駆動設計の概要
honodera
5
950
Other Decks in Programming
See All in Programming
Understand the mechanism! Let's do screenshots tests of Compose Previews with various variations / 仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
sumio
3
620
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
440
サーバーレスで負荷試験!Step Functions + Lambdaを使ったk6の分散実行
shuntakahashi
6
1.5k
How to Break into Reading Open Source
kaspth
2
210
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
380
いつか使える ObjectSpace / Maybe useful ObjectSpace
euglena1215
2
130
Shinjuku.rb#95:心の技術書紹介
free_world21
1
110
Go1.23で入った errorsパッケージの小さなアプデ
kuro_kurorrr
2
390
Kotlin 2.0が与えるAndroid開発の進化
masayukisuda
1
370
2024 컴포즈 정원사
jisungbin
0
150
What is Parser
yui_knk
9
4.1k
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
540
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
48
2.8k
Large-scale JavaScript Application Architecture
addyosmani
508
110k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.5k
Side Projects
sachag
451
42k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
123
18k
Atom: Resistance is Futile
akmur
261
25k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
166
48k
What's new in Ruby 2.0
geeforr
340
31k
Intergalactic Javascript Robots from Outer Space
tanoku
268
26k
Happy Clients
brianwarren
96
6.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
25
3.9k
Why Our Code Smells
bkeepers
PRO
334
56k
Transcript
υϝΠϯۦಈઃܭ ίϯςΩετϚοϓͷ ֓ཁ
લճDDDͷ֓ཁ ʹ͍ͭͯઆ໌͠·ͨ͠ ࠓճίϯςΩετϚοϓʹ ͍ͭͯ
(ಋೖ) ίϯςΩετϚοϓ ͬͯͳΜͰ͔͢ʁ
ίϯςΩετϚοϓͱ • DDDͷύλʔϯϥϯήʔδͷ̍ͭ ίϯςΩετϚοϓDDDΛߟҊͨ͠ΤϰΝϯ εͬͯਓ͕OO+XPͰͬͨͱ͖ͷ࣮ફΛ׆͔͠ ͯߟҊͨ͠ܦݧଇɺ๏ଇͷ̍ͭ(͜͏͍͏ͱ͖ʹ͜ ΜͳऔΓΈΛߦͳͬͨΒ͏·͍ͬͨ͘తͳ) ※ύλʔϯϥϯήʔδ...ൃݟ͔Βղܾͷϓϩ ηεͷҰఆͷϧʔϧΛهड़ͨ͠ͷ
DDDͷଞͷύλʔϯׂѪ • ϢϏΩλεݴޠ ϓϩδΣΫτʹؔ͢ΔʮاըɺઃܭɺϓϩάϥϚɺσβΠφʔɺ ސ٬ɺίʔυɺυΩϡϝϯτʯ͕ڞ௨ͷݴޠͰཧղ͞ΕΔ͜ͱ • ϨΠϠԽΞʔΩςΫνϟ υϝΠϯʹؔ͢Δίʔυ͕֤ϨΠϠʹࢄ͢ΔͱɺίʔυΛಡΜͰ ҙຯΛཧղ͢Δ͜ͱ͕ࠔʹͳΔɻυϝΠϯʹؔ͢ΔॲཧυϝΠ ϯʹدͤΔ
• υϝΠϯͷߏཁૉ(ΤϯςΟςΟɺΦϒδΣΫτɺαʔϏε...) υϝΠϯͷΫϥεΛͲͷΑ͏ʹ࡞͍͔ͬͯ͘ • ଞ͍Ζ͍Ζ
(ຊ) ίϯςΩετϚοϓ ͷৄࡉͳઆ໌
υϝΠϯΛྨͯ͠ ͦΕͧΕͷؔ࿈Λཧ͢Δ
͜Μͳײ͡Ͱᶃ UUpstream(ఏڙ͢Δଆ) DDownstream(ఏڙ͞ΕΔଆ)
͜Μͳײ͡Ͱᶄ
υϝΠϯʹ͍ͭͯ෮श • ࠷େ͖͍υϝΠϯ(ϏδωευϝΠϯ/Ϗδωε ͷେ)ʮhogeࣾͷఏڙ͍ͯ͠ΔαʔϏεfooʯ →େͱͳΔ↑ษڧձͰࢼ͠ʹ࡞Δࡍɺ·ͣ࠷ॳ ʹશһͰܾΊͯಉҙͨ͠΄͏͕͍͍͔ • Ұ෦Λࢦ͢߹ʹʮίΞυϝΠϯʯٴͼʮαϒ υϝΠϯʯͱ͍͏ݴ༿Λ͏
αϒυϝΠϯͬͯ (খചۀऀʹΑΔΦϯϥΠϯൢചΛྫʹ͢Δͱ...) • ϏδωευϝΠϯʮECίϚʔεʯͱ͔ • 4ͭͷओཁͳαϒυϝΠϯ 1.Χλϩά(ങ͍٬ʹݟͤΔ)ɺ2.จ(ങ͍٬͔Βड͚ ͚Δ)ɺ3.ٻ(ۚΛऩ͢Δ)ɺ4.ൃૹ(ങ͍खʹΛൃૹ͢ Δ)ɺଞࡏݿͱ͔͍Ζ͍Ζ... ※ൢച͢Δ෯͍ͷͰͦͷৄࡉؾʹ͠ͳ͍
ίΞυϝΠϯͬͯ • ڝ߹ଞࣾʹର͢Δ༏ҐΛཱ֬Ͱ͖ΔͳͲɺϏδωεΛߦͳͬ ͍ͯ͘͏͑Ͱॏཁͳ͜ͱؚ͕·Ε͍ͯΔͷ • αϒυϝΠϯͷྫ(DDDຊͷྫ)Ͱɺݕ౼͍ͯͬͨ݁͠Ռ ʮधཁ༧ଌػೳʯͱ͍͏υϝΠϯ͕Ճ͞ΕɺίΞυϝΠ ϯͱͨ͠ • ৫Λޭʹಋ͘ॏཁͳͷ
ษڧձͰ͏ͪʹͱͬͯ࠷ॏཁͳͷͳʹ͔ɺͦΕͧ Εߟ͑ͯΈ͍ͯͩ͘͞
ίϯςΩετϚοϓ࡞ͷ ਐΊํ 1. ͲΜͳαϒυϝΠϯ͕͋Δ͔ڍ͛Δ 2. ίΞυϝΠϯͲΕ͔ΈΜͳͰ͠߹ܾͬͯΊΔ 3. αϒυϝΠϯಉ࢜ͷؔ࿈ΛΈΜͳͰ͠߹ܾͬͯΊΔ 1.ʙ3.Λ܁Γฦ͢(ҰͰᘳʹͰ͖͕͋ΔͷͰͳ͍ ͷͰɺ܁Γฦٞ͢ΛॏͶΔ)
ࡉ͔͍ਐΊํ֤νʔϜʹ͓·͔ͤ
ίϯςΩετؒͷؔᶃ • ύʔτφʔγοϓ ྆νʔϜ͕ڠྗ͢Δɻ૬ޓґଘͷؔ • ڞ༗Χʔωϧ ໌ࣔతʹڥքΛܾΊɺҰͭͷυϝΠϯΛ2ͭͷνʔϜ͕ڞ༗͢Δɻ ͦͷࡍϢϏΩλεݴޠ߹ΘͤΔ • ސ٬/ڙڅऀͷ։ൃ
(্ྲྀνʔϜͷޭͷͨΊʹ)্ྲྀ͕ԼྲྀνʔϜͷχʔζʹԠ͑Δ • ॱԠऀ ্ྲྀ(ఏڙ͢Δଆ)͕Լྲྀ(ఏڙ͞ΕΔͷΛ͏ଆ)ͷཁٻʹԠ͑ͯ͘Εͳ͍ͷͰ͖͋ ΒΊΔɻզຫɻ
ίϯςΩετؒͷؔᶄ • ഊࢭ(ACL AntiCorruptin Layer) ͦΕͧΕͷίϯςΩετʹͯར༻͢ΔϞσϧΛมΛ྆ํʹରͯ͠ߦ͏ɻ ͦΕͧΕͷίϯςΩετʹӨڹͳ͍ • ެ։ϗεταʔϏε(Open Host
Service) αϒγεςϜΛΞΫηεͰ͖ΔΑ͏ʹ͢ΔϓϩτίϧΛఆٛɻશһ͕༻Ͱ͖Δ • ެද͞Εͨݴޠ(Published Language) ίϯςΩετͷϞσϧಉ࢜Λม͢Δࡍʹڞ༗ͷݴޠΛఆٛ͢Δ • ผʑͷಓ ॱԠऀͷΑ͏ʹզຫ͢Δ͜ͱͳ͘ɺ͓ผΕɻඞཁͳͷΛࣗͨͪͰ࡞Δ • େ͖ͳటஂࢠ (ίϯςΩετؒͷؔͱ͍͏͔ίϯςΩετͷঢ়ଶ?)ͻͲ͍ঢ়ଶͷશମΛେ͖͘ғΉڥքΛ ࡞Δ
ίϯςΩετϚοϓΛ࡞Δత ʗϝϦοτ • ΓऔΓ͕ඞཁʹͳΔγεςϜΛѲͰ͖Δ • ڊେͳటͩΜ͝ͷΑ͏ͳίϯςΩετͱؔΘΔࡍʹ༗༻ ൴Βͱͷؔ࿈Λ͖ͪΜͱөͤ͞ݟΛಘ͓ͯ͘ɻͲ͜ͰνʔϜؒͷίϛϡ χέʔγϣϯ͕ඞཁʹͳΔ͔அͰ͖ΔΑ͏ʹͳΔ • νʔϜؒͷΓऔΓΛԁʹ͢ΔͨΊʹར༻Ͱ͖Δ
ਤʹͳ͍ͬͯΔͨΊ͔Γ͍͢ • ґଘ͢ΔଞͷϓϩδΣΫτͱͷؔΛҙਂ͘ߟ͑ΒΕΔΑ͏ʹͳΔ • ৫ͷߏʹؔΘͬͯ͘Δ ݱঢ়ίϯςΩετ㲈νʔϜʹͳ͍ͬͯΔʁ
࡞্ͷҙ • ͋͘·Ͱݱঢ়ɺݱଘ͢ΔͷΛਤࣔ͢Δ͜ͱ কདྷΉ࢟ɺ͋Δ͖࢟Λਤࣔ͢ΔͷͰͳ͍ • ڽΒͳ͍͍ͯ͘ ϗϫΠτϘʔυʹϚʔΧͰॻ͘ఔͰΑ͍ ↑ͱΓ͋͑ͣษڧձͰ্ه̎ͭΛҙ͢ΕΑ͍ • ίϯςΩετϚοϓΛߋ৽͢Δ
• ࡞ͬͨͷډࣨʹܝࣔ͢ΔͳͲͯ͠ϝϯόʔ͕͍ͭͰݟΕΔΑ͏ ʹ