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
ドメイン駆動設計 勉強会 〜 エンティティ編 〜 / 2024-02-20
Search
Takuma Yamamoto
February 20, 2024
Programming
0
110
ドメイン駆動設計 勉強会 〜 エンティティ編 〜 / 2024-02-20
Takuma Yamamoto
February 20, 2024
Tweet
Share
More Decks by Takuma Yamamoto
See All by Takuma Yamamoto
ドメイン駆動設計 勉強会 〜 リポジトリ編 〜 / 2024-04-23
tamago3keran
0
98
スナックミーの開発はワクワクだらけ! / 2024-04-05
tamago3keran
0
180
アウトプットのハードルを下げた! / 2024-03-25
tamago3keran
0
400
ドメイン駆動設計 勉強会 〜 ドメインサービス編 〜 / 2024-03-05
tamago3keran
0
100
ドメイン駆動設計 勉強会 〜 値オブジェクト編 〜 / 2024-02-06
tamago3keran
1
1.7k
スカウト返信率を倍にするためにやったこと / 2024-01-29
tamago3keran
3
1k
Rails 経験者が FastAPI 本を読んで感じたこと / 2023-11-28
tamago3keran
0
1.6k
アウトプットのモチベーションはみんな違ってみんな良い! / 2023-10-06
tamago3keran
0
1.3k
PC が変わっても使い慣れた Neovim で すぐに開発を始める仕組み / 2023-07-25
tamago3keran
1
1.1k
Other Decks in Programming
See All in Programming
TypeScriptのmoduleオプションを改めて整理する
bicstone
4
460
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
290
コンポーネントライブラリで実現する、アクセシビリティの正しい実装パターン
schktjm
1
710
Efficiency and Rock 'n’ Roll (Really!)
hollycummins
0
660
Using AI Tools Around Software Development
inouehi
0
510
実はすごいスピードで進化しているCSS
hayato_yokoyama
0
100
JSAI2025 RecSysChallenge2024 優勝報告
unonao
1
420
がんばりすぎないコーディングルール運用術
tsukakei
1
210
FastMCPでMCPサーバー/クライアントを構築してみる
ttnyt8701
2
120
💎 My RubyKaigi Effect in 2025: Top Ruby Companies 🌐
yasulab
PRO
1
130
ts-morph実践:型を利用するcodemodのテクニック
ypresto
1
580
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
170
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
71
4.8k
KATA
mclloyd
29
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
106
19k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Designing for Performance
lara
608
69k
For a Future-Friendly Web
brad_frost
178
9.8k
RailsConf 2023
tenderlove
30
1.1k
Transcript
υϝΠϯۦಈઃܭ ษڧձ Takuma Yamamoto ʙ ΤϯςΟςΟฤ ʙ
BIOGRAPHY ͋ͳͨ୭Ͱ͔͢ʁ 5BLVNB:BNBNPUP 8PSLBUTOBQNF 'SPN.JZB[BLJ 4/4 झຯ ɾɹɹIUUQTHJUIVCDPNUBNBHPLFSBO ɾɹɹIUUQTUXJUUFSDPNZBNBUBLV ɾɹɹIUUQTRJJUBDPNUBNBHPLFSBO
ɾɹɹIUUQT[FOOEFWUBNBHPLFSBO ɾ͓ͭ ɾαφ ɾΞχϝ ɾɹɹIUUQTOPUFDPNUBNBHPLFSBO ࠷͍ۙͬͯΔ͜ͱ ɾΤϯδχΞ࠾༻શൠ ɾ-BNCEBΛͬͨ$3.ͷ࣮
INTRODUCTION Ҿ͖ଓ͖͜ͷຊΛࢀߟʹ͍ͯ͠·͢ ࠳ંͨ͠%%%Λࠓ͔ͦͬ͜͠ΓֶͿͨΊɺ։ൃऀʹͱͬͯ༏͍͠ೖॻͰ͋ΔʮυϝΠϯۦಈ ઃܭೖʯΛҾ͖ଓ͖ࢀߟʹ͍ͯ͠·͢ɻ
INTRODUCTION υϝΠϯϞσϧ͔Β࣮ʹམͱ͠ࠐΉ෦ʹϑΥʔΧε վΊͯͷઆ໌ʹͳΓ·͕͢ɺ͜ͷษڧձͰ։ൃऀʹͱͬͯཧղ͍͢͠lϞσϦϯάͨ֓͠೦Λ࣮ ʹམͱ͠ࠐΉͨΊͷύλʔϯzʹϑΥʔΧε͍ͯ͠·͢ɻ αϯϓϧίʔυͳͲҰॹʹڞ༗͠ͳ͕ΒਐΊΔͷͰɺͥͻΠϝʔδΛΒ·ͤͯɺۀʹ׆͔ͤͦ͏ ͳ෦Λ୳͍͚ͯͨͩ͠Εͱࢥ͍·͢ʂ υϝΠϯͷ֓೦ υϝΠϯϞσϧ υϝΠϯ ΦϒδΣΫτ
͜͜ʹूத
Previous Review લճͷৼΓฦΓ
REVIEW “” ͕࣋ͭੑ࣭ ΦϒδΣΫτͦͷ໊ͷ௨Γɺzzͱͯ͠ͷੑ࣭Λ࣋ͭΦϒδΣΫτͰͨ͠ɻͦͯ͠ɺzz͕࣋ͬ ͍ͯΔੑ࣭ͱͯ͠ɺҎԼͷΑ͏ͳͷ͕ڍ͛ΒΕ͍ͯ·ͨ͠ɻ ɾෆมͰ͋Δ ɾަ͕ՄೳͰ͋Δ ɾՁੑʹΑͬͯൺֱ͞ΕΔ
REVIEW ΦϒδΣΫτΛ༻͢ΔϝϦοτ ϓϦϛςΟϒͳ͚ͩͰγεςϜΛߏங͢ΔͷͰͳ͘ɺదͳՕॴͰΦϒδΣΫτΛར༻࣮ͯ͠ ͢Δ͜ͱͷϝϦοτʹ͍ͭͯɺҎԼͷΑ͏ͳઆ໌Λ͞Ε͍ͯ·ͨ͠ɻ ɾදݱྗΛ૿͢ ɾෆਖ਼ͳΛଘࡏͤ͞ͳ͍ ɾޡͬͨೖΛ͙ ɾϩδοΫͷࢄࡏΛ͙
INTRODUCTION ࠓͷࡐ “ΤϯςΟςΟ” Ͱ͢ ࠓΦϒδΣΫτͱਅٯͷΑ͏ͳੑ࣭Λ࣋ͭlΤϯςΟςΟzͱ͍͏υϝΠϯΦϒδΣΫτʹͭ ͍ͯ͠·͢ɻ ΦϒδΣΫτ ΤϯςΟςΟ ˞&3ਤΦϒδΣΫτؔϚοϐϯάͰग़ͯ͘ΔΤϯςΟςΟͱҟͳΔ֓೦ͳͷͰҙ⚠
What are the properties of “Entity”? ͦͦ “ΤϯςΟςΟ” ͕࣋ͭੑ࣭ͱԿ͔
LESSON “” ͱਅٯͷΑ͏ͳੑ࣭Λ࣋ͭ લճհͨ͠ΦϒδΣΫτͱҧ͍ɺΤϯςΟςΟҎԼͷΑ͏ͳੑ࣭Λ࣋ͭͱ͞Ε͍ͯ·͢ɻ ͔͜͜Β্هͷੑ࣭ʹ͍ͭͯɺͻͱͭͣͭ۷ΓԼ͛ɺΤϯςΟςΟʹֶ͍ͭͯΜͰ͍͖·͢ɻ ɾՄมͰ͋Δ ɾಉ͡ଐੑͰ͋ͬͯ۠ผ͞ΕΔ ɾಉҰੑΛͭ
How are the properties represented in Entity? ͦͷੑ࣭ΛΤϯςΟςΟͰͲ͏දݱ͢Δ͔
LESSON ΤϯςΟςΟͷੑ࣭ “ՄมͰ͋Δ” ࢲͨͪਓؒͷlzlମॏzͱ͍ͬͨଐੑ͕มԽ͢Δͷͱಉ͡Α͏ʹɺΤϯςΟςΟͷଐੑมԽ ͢Δ͜ͱ͕ڐ༰͞Ε͍ͯ·͢ɻ ˞ՄมͳΦϒδΣΫτجຊతʹհͳଘࡏͰ͋ΔͨΊɺෆมͷ··ͰΑ͍ͷෆมʹ͖͢⚠ ͷมԽ ମॏͷมԽ
LESSON ΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠ʁ Ϣʔβʔ໊Λมߋ͍ͨ͠߹ɺzΤϯςΟςΟzͱͯ͠ਖ਼͍࣮͠ͲͪΒͰ͠ΐ͏͔ʁ B A
LESSON ΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠ʁ ΦϒδΣΫτ͕࣋ͭଐੑΛϝιουΛ௨ͯ͡มߋ͢Δ"͕ɺΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠Ͱ͢ɻ B A ΤϯςΟςΟͰͷ࣮ྫ ΦϒδΣΫτͰͷ࣮ྫ
LESSON ΤϯςΟςΟͷੑ࣭ “ಉ͡ଐੑͰ͋ͬͯ۠ผ͞ΕΔ” ΦϒδΣΫτଐੑ͕ಉ͡Ͱ͋Εಉ͡ͷͱͯ͠ѻΘΕ·͕ͨ͠ɺΤϯςΟςΟଐੑ͕ಉ͡Ͱ ͋ͬͯ۠ผ͞Ε·͢ɻਓؒͰ͍͏ಉಉ໊ΛΠϝʔδͯ͠Β͑Δͱཧղ͍͢͠ͱࢥ͍·͢ɻ ٿք ΞΠυϧք lUBLV̋̋LJNV̋̋z lUBLV̋̋LJNV̋̋z
LESSON ΤϯςΟςΟͷੑ࣭ ”ಉҰੑΛͭ” ͰγεςϜ্ಉ͡ଐੑͰ͋ΔΦϒδΣΫτΛͲͷΑ͏ʹͯ۠͠ผ͢Δͷ͔ʁͦ͜Ͱ༻͞ΕΔͷ͕ ࣝผࢠͰ͢ɻ ࣝผࢠΛར༻͢Δ͜ͱͰɺϢʔβʔ໊Λมߋͨ͠ͱͯ͠ɺมߋલޙͷϢʔβʔ͕ಉҰͰ͋Δͱ͍͏ ͜ͱΛࣝผ͢Δ͜ͱ͕Ͱ͖·͢ɻ lUBLVNBZBNBNPUPz lUBNBHPLFSBOz
LESSON ΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠ʁ ՁੑͰͳ͘ɺಉҰੑͰ۠ผ͞ΕΔΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠ͲΕͰ͠ΐ͏ʁ B A
LESSON ΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠ʁ ࢯ໊ଐੑͰͳ͘ɺࣝผࢠͰൺֱΛ͍ͯ͠Δ#͕ɺΤϯςΟςΟͱͯ͠ਖ਼͍࣮͠Ͱ͢ɻ B A
The bene fi ts of using Domain Objects υϝΠϯΦϒδΣΫτΛ༻͢ΔϝϦοτͱ
LESSON υϝΠϯΦϒδΣΫτΛ༻͢ΔϝϦοτʹ͍ͭͯ ͓ޓ͍ʹҟͳΔੑ࣭Λ࣋ͭlΦϒδΣΫτzͱlΤϯςΟςΟzɺ͍ͣΕυϝΠϯΦϒδΣΫτ ͰɺҎԼͷΑ͏ͳϝϦοτΛ࣋ͪ·͢ɻ ͔͜͜Β্هͷϝϦοτʹ͍ͭͯհ͠·͢ɻదͳ໘ʹग़͘Θͨ͠ͱ͖ɺlΦϒδΣΫτz lΤϯςΟςΟzͰ࣮͍ͨ͠ͱࢥͬͯΒ͑Δͱخ͍͠Ͱ͢ɻ ɾίʔυͷυΩϡϝϯτੑ͕ߴ·Δ ɾυϝΠϯʹ͓͚ΔมߋΛίʔυʹ͑͘͢͢Δ
LESSON ϝϦοτ “ίʔυͷυΩϡϝϯτੑ͕ߴ·Δ” લճհ͠·͕ͨ͠ɺࡏݿཧʹ͓͍ͯίʔυΛҎԼͷΑ͏ʹϓϦϛςΟϒͳͰཧ͍ͯ͠ Δͱɺίʔυ͕ͲͷΑ͏ͳϩδοΫͰઃܭ͞Ε͍ͯΔ͔ಡΈऔΕ·ͤΜɻ ҰํͰҎԼͷΑ͏ʹ࣮͢Δͱɺ࣮ʮΧςΰϦɾ࿈൪ɾϨϏδϣϯʯͱ͍͏ߏͰίʔυ͕ઃ ܭ͞Ε͍ͯΔ͜ͱ͕໌֬ʹͳΓɺυΩϡϝϯτੑ͕ߴ·Γ·͢ɻ
LESSON ϝϦοτ “υϝΠϯʹ͓͚ΔมߋΛίʔυʹ͑͘͢͢Δ” ίʔυʹlΧςΰϦʔͷ෦͕จࣈͰߏ͞ΕΔzͱ͍͏ϧʔϧ͕͋Δͱ͠·͢ɻͦͷϧʔϧ ΛνΣοΫ͢ΔॲཧΛυϝΠϯΦϒδΣΫτΛ༻ͤͣɺҎԼͷΑ͏ʹ࣮͍ͯͨ͠ͱ͠·͢ɻ γεςϜΛ։ൃ্͍ͯ͘͠Ͱɺίʔυ͕ೖྗ͞ΕΔՕॴ͕૿͑ΔͱɺͦΕʹ্͍هͷॲཧ૿ ͑·͢ɻͦͷঢ়گͰΧςΰϦʔͷจࣈΛzจࣈzͰߏ͢ΔΑ͏มߋͨ͠ΒͲ͏ͳΔͰ͠ΐ͏ʁ ϧʔϧมߋΛదԠ͢ΔՕॴΛ୳͠ग़͢ͷ͕ͱͯେมͳͷ໌നͩͱࢥ͍·͢ɻ
LESSON ͦͷॲཧΛlΦϒδΣΫτzͱͯ͠Ϋϥεͷதʹด͡ࠐΊɺඞͣlΦϒδΣΫτzΛ௨ͯ͠ॲཧ͠ ͯ͠·͑ɺϧʔϧมߋ͕͋ͬͨͱ͖ʹ͙͢ʹίʔυʹద༻͢Δ͜ͱ͕Ͱ͖·͢ɻ ϝϦοτ “υϝΠϯʹ͓͚ΔมߋΛίʔυʹ͑͘͢͢Δ”
How do we set the criteria? ΤϯςΟςΟͱ࣮͖ͯ͢͠ج४ʁ
LESSON ΦϒδΣΫτͱΤϯςΟςΟͰ໎ͬͨΒ lΦϒδΣΫτzͱlΤϯςΟςΟzʹࣅ௨ͬͨ෦͕͋ΔͨΊɺͲͪΒͰ࣮͢Δ͖͔ج४͕ ͋Δͱخ͍͠Ͱ͢ΑͶɻ͜ͷຊͰҎԼͷج४͕հ͞Ε͍ͯ·͢ɻ ϥΠϑαΠΫϧ࿈ଓੑΛ͔࣋ͭ ྫ ϢʔβʔΞΧϯτొͰ࡞͞Εɺར༻͍ͯ͘͠͏ͪʹঃʑʹΞΫηε͕ݮ͍ͬͯ ͖ɺϢʔβʔ͕আ͞ΕΔɻ·͞ʹϥΠϑϥΠΫϧΛ࣋ͪɺ࿈ଓੑͷ͋Δ֓೦ɻ
LESSON γεςϜͷίϯςΩετ࣍ୈͰมΘΔ ಉ͡ରͰ͋ͬͨͱͯ͠ɺϥΠϑαΠΫϧΛ࣋ͨͤΔ͖͔Ͳ͏͔ɺγεςϜͷίϯςΩετ ʹΑͬͯҟͳΓ·͢ɻ εφοΫϛʔ ϨγϐαʔϏε ࡐྉ ϨγϐΛߏ͢ΔϥΠϑαΠΫϧ࣋ͨͳ͍ύʔπ ͞Εɺʹಧ͖ɺظݶ·Ͱʹ༻͢Δ ΦϒδΣΫτͰͷ࣮͕ద
ΤϯςΟςΟͰͷ࣮͕ద ͱ͍ͬͨϥΠϑϥΠΫϧΛ࣋ͭ
Where could we potentially use Entity? εφοΫϛʔͩͱɺͲ͜ΛΤϯςΟςΟͰ࣮Ͱ͖ͦ͏͔ʁ
GitHub Ͱ୳ͯ͠Έ·͠ΐ͏ʂ
Summary ΤϯςΟςΟʹ͍ͭͯ·ͱΊΔͱ…
SUMMARY ΤϯςΟςΟʹֶ͍ͭͯΜͰΈͯ… ɾΤϯςΟςΟɺҎԼʹࣔ͢Α͏ͳzzͷੑ࣭Λ࣋ͭ ɹɾՄมͰ͋Δɺಉ͡ଐੑͰ͋ͬͯ۠ผ͞ΕΔɺಉҰੑΛͭ ɾυϝΠϯΦϒδΣΫτΛͬͨγεςϜ։ൃɺҎԼʹࣔ͢Α͏ͳϝϦοτΛ࣋ͭ ɹɾίʔυͷυΩϡϝϯτੑ͕ߴ·ΔɺυϝΠϯʹ͓͚ΔมߋΛίʔυʹ͑͘͢͢Δ ɾΦϒδΣΫτͰͳ͘ɺΤϯςΟςΟͰ࣮͢Δج४ ɹɾϥΠϑαΠΫϧ࿈ଓੑΛ͔࣋ͭͲ͏͔
Recruitment ΤϯδχΞืूதͰ͢ʂ
RECRUITMENT We are Hiring! εφοΫϛʔͰɺʮ͓ͭͱɺੈքΛ໘ന ͘ʯ͍ͯ͘͠ɺͦΜͳ׆ಈΛࣄͱͯ͠औΓ Έ͍ͨΤϯδχΞΛืू͍ͯ͠·͢ɻ IUUQTUFBNTOBRNFDPN εφοΫϛʔ࠾༻