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
かとじゅん
June 05, 2019
Programming
5
2.4k
ドメイン駆動設計基礎講座_ドメインと組織編_
かとじゅん
June 05, 2019
Tweet
Share
More Decks by かとじゅん
See All by かとじゅん
メッセージとイベントを中核に置いたシステム設計の有用性について
j5ik2o
10
2.8k
私のキャリアの旅路: 技術をきっかけに変化を楽しむ
j5ik2o
3
770
いかに開発効率と品質を高めるか: ドメイン駆動設計と組織パターンの視点から考える
j5ik2o
3
2.3k
社内のメンバーに「関数型プログラミングの学習・教育」についていろいろ聞いてみた
j5ik2o
2
1.7k
AWS データベースブログの記事 「Amazon DynamoDBによる CQRSイベントストアの構築」 を勝手に読み解く
j5ik2o
2
2.6k
EIPとAkkaについて
j5ik2o
3
2.5k
モデルを中心にデザイン(設計)すること
j5ik2o
2
2.6k
ドメインイベントの観点から再考するソフトウェア設計
j5ik2o
17
10k
セキュリティのためのソフトウェア設計について
j5ik2o
4
1.9k
Other Decks in Programming
See All in Programming
cmp.Or に感動した
otakakot
2
140
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
860
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
230
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
1
170
Ethereum_.pdf
nekomatu
0
460
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
580
Featured
See All Featured
The Language of Interfaces
destraynor
154
24k
How to Ace a Technical Interview
jacobian
276
23k
The Cult of Friendly URLs
andyhume
78
6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Statistics for Hackers
jakevdp
796
220k
For a Future-Friendly Web
brad_frost
175
9.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
860
What's in a price? How to price your products and services
michaelherold
243
12k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Transcript
υϝΠϯۦಈઃܭجૅߨ࠲ ʙυϝΠϯͱ৫ฤʙ ͔ͱ͡ΎΜ !KJLP
υϝΠϯͱ#$
υϝΠϯͱ#$ w υϝΠϯ ྖҬ w Ϗδωεͷઓུ՝Λੳ໌֬Խ͢ΔྖҬ w #$ڥք͚ͮΒΕͨίϯςΩετ ղܾྖҬ
w Ϗδωεͷઓུ՝Λղܾ͢ΔྖҬ
αϒυϝΠϯ w ίΞυϝΠϯ w ৫Λޭʹಋ͘࠷ॏཁͳ ͷ w αϒυϝΠϯ w ࢧԉυϝΠϯ
w ϏδωεʹඞཁෆՄܽͩ ͕ίΞυϝΠϯ΄ͲॏཁͰ ͳ͍ͷ w ൚༻υϝΠϯ w ϏδωεʹಛผͰͳ͍͕ શମͱͯ͠ඞཁͳͷ ೝূ ܥ ֎෦&31ͳͲࠩ͠ସ͑ Մೳͳͷ υϝΠϯ ࢧԉυϝΠϯ ൚༻υϝΠϯ ίΞυϝΠϯ
&ίϚʔεͷυϝΠϯੳྫ υϝΠϯ &ίϚʔε#$ Χλϩά จ ٻ ൃૹ ࡏݿ w ଟ͘ͷؔ৺ࣄ͕୯Ұ#$ʹด͡ࠐΊΒΕͯ͢ͷཁٻʹରԠͰ͖ͳ͍
w ຊ࣭తͰͳ͍ґଘ͕ൃੜ͠มߋ༰қੑ͕Լ͢Δ w ৫ͷίϛϡχέʔγϣϯෳࡶԽ͢Δ w ຊདྷαϒυϝΠϯɾ#$ຖʹׂ͞ΕΔ͖ w ग़య࣮ફυϝΠϯۦಈઃܭ
αϒυϝΠϯͷੳ w ෳࡶʹབྷΈ߹ͬͨϞ σϧΛղ͠ɺػೳ ʹج͍ͮͨαϒυϝ Πϯʹׂ͢Δ w αϒυϝΠϯ#$ͷ ؔੑཧ͢Δ w
#$͕αϒυϝΠϯ ͚ͩͰΓཱͭͱ ݶΒͳ͍͕ɺͰ͖Ε #$ʹαϒυϝΠ ϯ͕·͍͠ w ग़య࣮ફυϝΠϯۦ ಈઃܭ υϝΠϯ &ίϚʔε#$ ٻ จ Χλϩά ࡏݿ#$ ൃૹ धཁ༧ଌ#$ ࡏݿ
ίΞυϝΠϯͷੳ w ࡏݿͷ࠷దԽ͕՝ w ചΕߦ͖͕Α͍Λޮతʹࡏݿ͠ɺചΕͳ͍ ͷࡏݿΛ֬อ͠ͳ͍ɻ w ࢿۚޮΛվળ͠ചΕےͷࡏݿΛ֬อ͘͢͠ ͢Δɻ·ͨɺ༧Λ্ճΔചΕߦ͖Λݟͤͨͱ͖ɺ ͦͷͷࡏݿ֬อͰ͖ͳ͚ΕͳΒͳ͍ɻ
w কདྷͷࡏݿྔച্ݟࠐΈΛաڈͷ͔ΒஅͰ ͖Εେ͖ͳॿ͚ʹͳΔɻ͜ͷΑ͏ͳधཁ༧ଌػೳ ͷಋೖ৽ͨͳίΞυϝΠϯʹͳΔͩΖ͏
ίϯςΩετϚοϓͷత w γεςϜؒͷؔΛదʹ ѲͰ͖Δ w νʔϜطଘγεςϜͱͷ࿈ ܞํ๏ΛѲͰ͖ɺଞνʔϜ ͱͷίϛϡχέʔγϣϯͷඞ ཁੑΛஅͰ͖ΔΑ͏ʹͳΔ w
ίϯςΩετϚοϓ৫ؒ ͷΛݟ͚ͭग़ͤΔ།Ұͷ υΩϡϝϯτͱͳΔͨΊɺϓ ϩδΣΫτͷޭʹෆՄܽͱ ͞Ε͍ͯΔ w ग़య࣮ફυϝΠϯۦಈઃܭ ೝূɾΞΫηε ΞδϟΠϧ ϓϩδΣΫτཧ ίϥϘϨʔγϣϯ 6 6 6 % % %
ίϯςΩετϚοϓͷύλʔϯ w ৫ύλʔϯ w νʔϜͷؔΛ ද͢ w ౷߹ύλʔϯ w σʔλͱγες
Ϝͷ࿈ܞํ๏Λ ද͢ νʔϜ# νʔϜ" γεςϜ# γεςϜ" ձ σʔλ
৫ύλʔϯ
ύʔτφʔγοϓ w ೋͭͷίϯςΩετΛ୲͢ΔνʔϜ͕ޭɾࣦഊͷ ӡ໋Λڞʹ͢Δ৫ύλʔϯ ӡ໋ڞಉମ w νʔϜؒͰڠྗతͳؔΛங͖ɺ։ൃͷϓϥϯχϯά ΠϯςάϨʔγϣϯͷཧڞಉͰߦ͍ɺ͓ޓ͍ͷ χʔζΛຬͨ͢Α͏ʹ͢Δඞཁ͕͋Δɻ૬ޓґଘ͢Δ
ػೳ͓ޓ͍ͷϦϦʔεʹؒʹ߹͏Α͏ʹ։ൃ͢Δ $POUFYU# $POUFYU"
ผʑͷಓ w ίϯςΩετΛ͢Δ৫ύλʔϯ w ೋͭͷػೳͷू߹͕͓ޓ͍ʹͱͬͯෆՄܽͰͳ͍ͳ Β͢Δ͜ͱ͕Ͱ͖Δ w ΠϯςάϨʔγϣϯͷߴίετΛΘ͟Θ͟͏ඞཁ ͳ͍ɻ։ൃऀ͕ͦͷখ͍͞είʔϓͰγϯϓϧͰಛԽ ͨ͠ղܾࡦΛݟ͚ͭΒΕΔΑ͏ʹ͢Δ
$POUFYU# $POUFYU"
ॱԠऀ w ্ྲྀԼྲྀ͕ؔ͋Δ৫ύλʔ ϯɻͨͩ͠ɺ্ྲྀ͕Լྲྀͷཁٻ ʹԠ͑Δಈػ͕ͳ͍ɻ w ্ྲྀʹԼྲྀͷ൱ͷ͕ͳ͍ w ԼྲྀνʔϜ#$ؒͷมͷखؒ Λলͨ͘Ίʹɺ্ྲྀʹ༩͑ΒΕ
ͨϞσϧͰզຫ͢͠Δ͜ͱʹͳ Δ $POUFYU# $POUFYU" 6QTUSFBN %PXOTUSFBN
ސ٬ڙڅऀ w ্ྲྀԼྲྀ͕ؔ͋Δ৫ύλʔ ϯɻͨͩ͠ɺ্ྲྀͷνʔϜ͕ޭ ͢Δ͔Ͳ͏͔͕Լྲྀͷ݁Ռʹࠨӈ ͞ΕΔ w ্ྲྀνʔϜԼྲྀνʔϜͷχʔζ ʹ༷ʑͳํ๏ͰରԠ͢Δඞཁ͕͋ ΔɻԼྲྀͷ༏ઌॱҐΛߟྀͯ͠ɺ
্ྲྀͷϓϥϯχϯάΛߦ͏ɻԼྲྀ ͷཁ݅ʹඞཁͱͳΔ࡞ۀʹ͍ͭͯ ަব͠ɺ༧ࢉΛཱͯΔ͜ͱͰఏڙ ͷଋͱεέδϡʔϧΛશһ͕ཧ ղͰ͖ΔΑ͏ʹ͢Δ $POUFYU# $POUFYU" 6QTUSFBN %PXOTUSFBN
౷߹ύλʔϯ
ڊେͳటஂࢠ #JH#BMMPG.VE w ڥք͕ͳ͍͘͠ᐆດͳγεςϜΛ ࣔ͢Ξϯνύλʔϯ w ෳͷ֓೦ମܥ͕ࠞ͟Γ߹͍ɺఆٛ ϧʔϧ͕ᐆດͳͬͨΓໃ६͢Δɻػೳ Ճ͞ΕΔͱJGDBTFͳͲͷذϩδο Ϋ͕૿͑ΔɻґଘؔιϑτΣΞ
Λԣஅ͠࠷ऴతʹటஂࢠʹͳΔ w &ίϚʔεͷͱࡏݿͷผͷ ֓೦͕ͩɺڥք͕ͳ͍ͷͰͯ͢ͷཁ ٻΛຬͨ͢ɺਆϞσϧͱͯ͠ͷϞ σϧ͕Ͱ͖͕͋Δɻཧղมߋࠔ ʹʜ w ࠷ਓؾ͕͋Δઃܭख๏Ͱ͋Δʜ $POUFYU# $POUFYU" $POUFYU$
ڞ༗Χʔωϧ w Ұ෦ͷϞσϧͦΕʹؔ࿈͢Δ ίʔυΛڞ༗͢Εɺ૬ޓґଘ ੑ͕ඇৗʹߴ·Δɻ w ઃܭ࡞ۀͷॿ͚ʹͳΔ͜ͱ͋ ΕɺٯʹअຐʹͳΔ͜ͱ͋ ΔɻҰํͷνʔϜʹ૬ஊͤͣʹ มߋͯ͠ͳΒͳ͍ɻ
w ໌ࣔతͳڥքΛఆΊɺೋͭͷ νʔϜ͕߹ҙͨ͠υϝΠϯϞσ ϧͷαϒηοτΛࢦఆ͢Δ $POUFYU# $POUFYU"
ഊࢭ "$- w ഊͨ͠ੈքͷϞσϧΛ৽͍͠ੈքʹ ࣋ͪࠐ·ͳ͍ͨΊͷ౷߹ύλʔϯ w ԼྲྀͷΫϥΠΞϯτִ͢ΔͨΊͷ ϨΠϠʔΛ࡞͢Δ͜ͱʹΑͬͯɺ্ ྲྀͷγεςϜͷػೳΛಠࣗͷυϝΠϯ Ϟσϧͷ༻ޠͰදݱ͢ΔػೳΛఏڙ͢
Δ w "$-طଘͷ*'Λͯ͠ଞͷγες Ϝͱ௨৴͢ΔͷͰɺଞͷγεςϜΛम ਖ਼͢Δඞཁ΄ͱΜͲͳ͍͔ɺ·ͬͨ ͘ͳ͍͜ͱ͋Δɻ෦తʹɺ͜ͷ ϨΠϠʔ͕ඞཁʹԠͯ͡ೋͭͷϞσϧ ؒͰͷมΛ྆ํʹରͯ͠ߦ͏ $POUFYU# $POUFYU" "$-
ެ։ϗεταʔϏε 0)4 w ϓϩτίϧΛαʔϏεͱͯ͠ެ։͠ɺαϒγεςϜͱ ౷߹͢Δඞཁ͕͋Δ৫͕ར༻Ͱ͖ΔΑ͏ʹ͢Δ w ৽͍͠౷߹ͷཁ݅ʹରԠ͢Δࡍɺϓϩτίϧʹػೳ ΛՃ֦͠ு͢Δɻͨͩ͠ɺ͋ΔνʔϜ͚ͩʹಛ༗ͷ ཁٻผͩɻͦͷΑ͏ͳಛघͳέʔεʹɺҰճݶΓ ͷมαʔϏεΛ༻ͯ͠ϓτϩτίϧΛ֦ு͠ɺڞ
༗ϓϩτίϧ୯७ͰҰ؏ੑͷ͋Δঢ়ଶΛอͭ͜ͱɻ $POUFYU# $POUFYU" 0)4
ެද͞Εͨݴޠ 1- w ͭͷڥքͷϞσϧಉ࢜Λม͢ΔͨΊʹڞ௨ͷ ݴޠΛ͏ɻ w ϞσϧΛ͜ͷڞ௨ݴޠʹมͨ͠ޙʹɺҰํͷϞσ ϧม͢Δ w ެද͞Εͨݴޠެ։ϗεταʔϏεͱΈ߹Θͤ
ͯར༻͞ΕΔ͜ͱ͕ଟ͍ $POUFYU# $POUFYU" 1-
#$ͱϚΠΫϩαʔϏε
#$ͱϚΠΫϩαʔϏε w #$ʹԊͬͯαʔϏεڥքΛҾ͘ɻνʔϜ#$ʹҰக ͢Δ͜ͱʹͳΔɻ#$ͷυϝΠϯ֓೦ΛѲ͢͠ ͘ͳΔɻཁٻมԽ࣌ʹมߋରͷαʔϏε͕ಛఆ͞ Εɺมߋ͢Δඞཁͷ͋ΔՕॴ͕ݮΓɺਝʹσϓϩΠ Ͱ͖ΔΑ͏ʹͳΔ w #$ͷαʔϏε͕͓ޓ͍ʹର͢ΔαʔϏεʹ͋Δ Մೳੑ͕ߴ·ΓɺγεςϜઃܭͱϦϦʔεௐ͕༰қ
ʹͳΔɻ w Ϗδωεརؔऀͱͷରͷํʹؔͯ͠ɺνʔϜ ͕ͷઐՈͱΑ͍ؔΛங͖͘͢ͳΔ
#$γεςϜͷڥքʹ৫ͷڥք
৫ΞʔΩςΫνϟʹӨ͞ΕΔ w ΠϊϕʔγϣϯͷδϨϯϚΑΓ
ίϯΣΠͷ๏ଇ w γεςϜΛઃܭ͢Δ͋ΒΏΔ৫ɺඞͣͦͷ৫ͷίϛϡχ έʔγϣϯߏʹ฿ ͳΒ ͬͨߏΛ࣋ͭઃܭΛੜΈग़͢ɻ w ͭ·Γɺ৫ͷߏγεςϜͷߏͱἧ͑ͯͳ͚ΕͳΒͳ ͍ɻ w
ٯίϯΣΠઓུ ग़య"/"(*-&8": w lࣗͨͪͷ·͍͠ΞʔΩςΫνϟઃܭΛଅਐ͢ΔΑ͏ ʹɺνʔϜͱ৫ଆΛػಈతʹਐԽͤ͞Δ͜ͱΛਪ͢Δɻ ཧతʹʮٕज़తΞʔΩςΫνϟʯ͕ʮϏδωεΞʔΩς Ϋνϟʯͷಉܗࣸ૾ʹͳΔΑ͏ʹz w ʮਓؒ৫ؒͷίϛϡχέʔγϣϯʢใྲྀʣʯͱ͍͏ ͷ͕ιϑτΣΞ։ൃʹܾఆతͳΠϯύΫτΛ༩͑Δɺͱ ͍͏͜ͱΛ·ͣೝΊɺͦΕΛੵۃతʹ׆༻͢ΔΑ͏ʹɺͱ͍ ͏͜ͱͰ͢ɻ
·ͱΊ w ڥք͚ͮΒΕͨίϯςΩετ #$ Ϟσϧͷ༗ޮൣ ғͱݴΘΕΔɻͦͷϞσϧརؔऀؒγεςϜ ؒͰར༻͞ΕΔɻ͜ͷಛੑʹ߹Θͤͯɺ৫ͷڥք ʹγεςϜͷڥքͱͳΔΑ͏ʹ͢Δ͜ͱ͕·ΕΔ w ʮιϑτΣΞձͰͰ͖ͯΔʯͱ͍͏ݴ༿͋
Δɻ৫͕վม͞ΕΔͱ͖ɺίϛϡχέʔγϣϯ ͷมԽ͕ιϑτΣΞ༩͑ΔӨڹΛແࢹͰ͖ͳ ͍ɻࡶͳίϛϡχέʔγϣϯγεςϜΛෳࡶʹ͢ ΔՄೳੑ͋Δ͠ɺ৫ؒͷׂ͕γϯϓϧʹͳΕ ɺͦΕΛӨͨ͠γεςϜγϯϓϧʹͳΔ͔͠ Εͳ͍