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
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ドメイン駆動設計 勉強会 〜 エンティティ編 〜 / 2024-02-20
Takuma Yamamoto
February 20, 2024
More Decks by Takuma Yamamoto
See All by Takuma Yamamoto
ドメイン駆動設計 勉強会 〜 リポジトリ編 〜 / 2024-04-23
tamago3keran
0
120
スナックミーの開発はワクワクだらけ! / 2024-04-05
tamago3keran
0
200
アウトプットのハードルを下げた! / 2024-03-25
tamago3keran
0
420
ドメイン駆動設計 勉強会 〜 ドメインサービス編 〜 / 2024-03-05
tamago3keran
0
120
ドメイン駆動設計 勉強会 〜 値オブジェクト編 〜 / 2024-02-06
tamago3keran
1
2.2k
スカウト返信率を倍にするためにやったこと / 2024-01-29
tamago3keran
3
1.1k
Rails 経験者が FastAPI 本を読んで感じたこと / 2023-11-28
tamago3keran
0
2.1k
アウトプットのモチベーションはみんな違ってみんな良い! / 2023-10-06
tamago3keran
0
1.6k
PC が変わっても使い慣れた Neovim で すぐに開発を始める仕組み / 2023-07-25
tamago3keran
1
1.3k
Other Decks in Programming
See All in Programming
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
160
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
The NotImplementedError Problem in Ruby
koic
1
690
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.1k
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
210
CSC307 Lecture 17
javiergs
PRO
0
320
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
120
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
120
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
700
Lessons from Spec-Driven Development
simas
PRO
0
150
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
Information Architects: The Missing Link in Design Systems
soysaucechin
0
960
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Unsuck your backbone
ammeep
672
58k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
The Limits of Empathy - UXLibs8
cassininazir
1
350
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Navigating Team Friction
lara
192
16k
Designing for Timeless Needs
cassininazir
1
250
Docker and Python
trallard
47
3.9k
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 εφοΫϛʔ࠾༻