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-4layers
Search
nozawa
March 05, 2024
Programming
2
24
DDD-4layers
ジャンケンアドカレを読んでDDD×4層に入門したので、
ありがちな悪いアーキテクチャと比較しながら理解をアウトプットしました。
nozawa
March 05, 2024
Tweet
Share
More Decks by nozawa
See All by nozawa
introduction-to-devops-metrics
yuunozawa
0
12
introduction-to-devops
yuunozawa
0
10
ansible-demo
yuunozawa
2
15
event-loop
yuunozawa
2
8
ansible-learning
yuunozawa
2
7
cool-URI-dont-change
yuunozawa
2
15
AWS-cloud-practitioner
yuunozawa
2
9
IoC-DI-DIContainer
yuunozawa
0
12
about-script-language
yuunozawa
2
10
Other Decks in Programming
See All in Programming
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
190
SpringBoot3.4の構造化ログ #kanjava
irof
2
990
定理証明プラットフォーム lapisla.net
abap34
1
1.8k
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
890
WebDriver BiDiとは何なのか
yotahada3
1
140
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
36
14k
Conform を推す - Advocating for Conform
mizoguchicoji
3
690
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
130
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
160
2,500万ユーザーを支えるSREチームの6年間のスクラムのカイゼン
honmarkhunt
6
5.3k
Software Architecture
hschwentner
6
2.1k
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
190
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
RailsConf 2023
tenderlove
29
1k
Fireside Chat
paigeccino
34
3.2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The World Runs on Bad Software
bkeepers
PRO
67
11k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
A designer walks into a library…
pauljervisheath
205
24k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Unsuck your backbone
ammeep
669
57k
Transcript
ᖒ %%%✖ͷৼΓฦΓ ษڧձ༻
%%%✖ͷৼΓฦΓ wֶशͷ͖͔͚ͬ Ϟνϕʔγϣϯ wͳͥ%%%✖ΛબͿͷ͔ w࣮ફͯ͠Έͯͷॴײ
͖͔͚ͬ ݁ɿδϟϯέϯΞυΧϨΛಡΈɺͩΒ͚ͳΞʔΩςΫνϟͷվળʹ׆͔ͤΔͱࢥͬͨ IUUQTRJJUBDPNBEWFOUDBMFOEBSKBOLFO
ҙࣝᶃΞʔΩςΫνϟ w 4QSJOHGSBNFXPSL .7$ τϥϯβΫγϣϯεΫϦϓτ w ϨΠϠʔ͕શ͔͘Βͳ͍ Αͬͯɺґଘͷ͖͕ཧ͞Εͳ͍
w ೝෛՙ͕ߴ͍ ΞʔΩςΫνϟ͕͋ΔΑ͏Ͱͳ͍ͨΊ࡞ΓΛ ΔͨΊʹ࣮Λ͏͔͠ͳ͍ ͖͔͚ͬ TSDNBJOKBWB cDPOUSPMMFS cFOUJUZ cTFSWJDF cGPSN cSFQPTJUPSZ cNPEFM cFYDFQUJPO cʜ TSDNBJOXFC cQBHFTը໘ cʜ
ҙࣝᶄ4FSWJDF w υϝΠϯ͕ࣝ݁ू͍ͯ͠Δ ӬଓԽͷ੍ɺϧʔϧ͜͜ w ࠷Մಡੑ͕͍ ಛʹ%50ͷॲཧͪΐͬͱͨ͠6*ͷؔ৺͝ͱͰ ͳͷʹΫϥεͷେΛΊ͍ͯͨΓ͢Δ w ෳࡶੑͱͬͱઓ͑Δͱײ͡Δ
͖͔͚ͬ !4FSWJDF QVCMJDDMBTT4FSWJDF\ !"VUPXJSFE QSJWBUF0UIFS4FSWJDFPUIFS4FSWJDF !"VUPXJSFE QSJWBUF3FQPTJUPSZSFQPTJUPSZ QVCMJD'PSNTFU'PSN%BUF 'PSNGPSN \ GPSNTFU.PEFM SFQPTJUPSZHFU%BUB#Z*E GPSNHFU*E ݸผͰ6*߹ͷͭΊͭΊ GPSNTFU*UFN SFUVSOGPSN ^ QVCMJD'PSNJOTFSU 'PSNGPSN \ JOTFSU༻ͷFOUJUZ ʹͭΊͭΊ .PEFMNPEFMOFX.PEFM JEͷ࠾൪͜͜Ͱ͢Δ NPEFMTFU*E SFQPTJUPSZHFU/FYU*E ^ ^
ҙࣝᶅ&OUJUZ .PEFM w ςʔϒϧσʔλήʔτΣΠ 3%#ͷςʔϒϧͱରɻ&OUJUZग़ྗ͘Μతͳ&YDFMϚ Ϋϩ͕͋ͬͨΓ͢Δ w +0*/ͷଟ͍ෳࡶͳΫΤϦ.PEFMΛ ͏ ςʔϒϧσʔλήʔτΣΠͷฐͩͱࢥ͏ɻ001త
Ͱͳ͘ઃܭΛݟ͑ʹ͘͘͢ΔݪҼͩͱݸਓతʹࢥͬ ͍ͯΔ w &OUJUZͱ.PEFM͕ͨ͘͞Μ͋Δ ςʔϒϧ ΧϥϜͷ6*දࣔͷͨΊʹ&OUJUZΛܧঝͯ͠ ࠩͷΧϥϜͨ͠.PEFM͕࡞ΒΕ͍ͯΔ͜ͱ͕ཧ ༝ͩͱࢥ͍ͬͯΔ ͖͔͚ͬ !&OUJUZ QVCMJDDMBTTB5CMJNQMFNFOUT4FSJBMJ[BCMF\ !*E !$PMVNO OBNFlJEz QSJWBUFMPOHJE ҎԼɺશϑΟʔϧυʹର͢Δ4FUUFS (FUUFS QVCMJDMPOHHFU*E \ SFUVSOJE ^ QVCMJDWPJETFU*E MPOHJE \ UIJTJEJE ^ ^
ҙࣝᶆ3FQPTJUPSZ w ΦϨΦϨ+%#$ϥούʔ w σʔλࢦΦϒδΣΫτࢦ &OUJUZର3FQPTJUPSZ w υϝΠϯ͕ࣝ࿙Εग़͍ͯΔ VQEBUFʓʓͰݸผΞοϓσʔτͨ͠Γෳࡶͳ༷ Λෳࡶͳ42-Ͱؤுͬͯղܾ͢ΔͳͲ
w SFQPTJUPSZ ӬଓԽͷӅṭ Ͱͳ͍ Α͏ͳ 42-ϑΝΠϧΛಡΜͰ͍Δ͠Լखͨ͠Β42-Λ ॻ͍͍ͯΔɻ%"0ύλʔϯ ͖͔͚ͬ !3FQPTJUPSZ QVCMJDDMBTT3FQPTJUPSZ\ !"VUPXJSFE QSJWBUF+ECD.BOBHFSKECD.BOBHFS QVCMJD-JTU.PEFMHFU)PHF#Z*E .PEFMN \ SFUVSOKECD.BOBHFSHFU3FTVMU CFBODMBTT lTRMQBUIz N ^ QVCMJDJOUJOTFSU .PEFMN \ SFUVSOKECD.BOBHFSJOTFSU lTRMQBUIz N ^ ^
͖͔͚ͬ·ͱΊ w ϨΠϠʔ͝ͱͷ࠴ͱґଘΛ͖ͬΓͤͯ͞ೝతෛՙΛ͍ͨ͘͠ w Ϋϥε͝ͱͷ࠴Λ͖ͬΓ͍ͤͨ͞ FOUJUZͰ͍͔ۤ͠ΒNPEFM͏ͱ͔ݏ w ͬͱΦϒδΣΫτࢦΛಥ͖٧Ί͍ͨ ݸਓతཉٻ
w ͰͲ͏ͬͯίʔυʹམͱ͍͍ͤͷʁ ɹɹ ɹɹ͡ΌΜ͚ΜΞυϕϯτΧϨϯμʔʹग़ձ͍ ɹɹܰྔ%%%ͱ ϨΠϠʔυΞʔΩςΫνϟ ͕ྑͦ͞͏ͩͱؾͮ͘ IUUQTRJJUBDPNBEWFOUDBMFOEBSKBOLFO
ͳͥ%%%✖͔ ݁ɿδϟϯέϯΞυΧϨͱদԬ͞ΜʹΑΔೖํ๏Λ৴པ͍ͯ͠Δ͔Β
ͳͥ%%%✖͔ w ʮ%%%ઓུతઃܭͱઓज़తઃܭ͕͋ΔΑ͏ͩʯ w ʮઓུతઃܭυϝΠϯΤΩεύʔτͱͷର͕ॏཁͰݸਓͰݶք͕͋Δͳʯ w ʮઓज़తઃܭ͚ͩؤுΔܰྔ%%%ΞϯνύλʔϯͬͯݴΘΕΔͷ͔ʯ w ʮΞϯνύλʔϯͳΒΔҙຯͳ͍ͷͰʁʯ
দԬ͞Μl%%%ͷϞ デ Ϧϯ グ ͱԿͳͷ͔ɺͦͯ͠ ど ͏ίʔ ド ʹམͱ͢ͷ͔z w ΈΜͳܰྔ%%%Ͱ࢝Ί͍ͯΔʂ
ͳͥ%%%✖͔ w ʮܰྔ%%%Ͱ࢝Ί͍͍ͯΒ͍͠ɺͰΞʔΩςΫνϟຊʹͰ͍͍ͷ͔ ʯ দԬ͞Μl৽ଔʹΘΔυϝΠϯۦಈઃܭͷΞʔΩςΫνϟઆ໌z ̐%%%ೖʹྑͦ͞͏
ॴײ ݁ɿʮΞʔΩςΫνϟτϨʔυΦϑͰ͋ΔʯΛ࣮ײͨ͠
ྑ͍ͱײ͡Δ໘ w ύοͱݟͯͱΘ͔Δ͜ͱͰೝ ෛՙԼ͕ͬͨͱࢥ͏ w ϨΠϠʔ͝ͱʹ4FSWJDFΛׂͰ ͖ͨ w 4FSWJDF&YDFQUJPOΛͰΓ ͚ͯߟ͑ΒΕΔΑ͏ʹͳͬͨ
ྫ͑SFRVFTUQBSBNTʹର͢Δྫ֎ "QQMJDBUJPOɺυϝΠϯͷ੍্ͷྫ֎ EPNBJOɺͳͲ ॴײ ΞʔΩςΫνϟฤ TSDNBJOKBWB cBQQMJDBUJPOTFSWJDF cEPNBJO cNPEFM cTFSWJDF cFYDFQUJPO cJOGSBTUSVDUVSF cSFQPTJUPSZ cQSFTFOUBUJPO cFYDFQUJPO cBQJ cEUP
ѱ͍ͱײ͡Δ໘ ఆ w 4FSWJDFͷ࠴ͷʹΉ ͜Ε%PNBJO4FSWJDF "QQMJDBUJPO4FSWJDF w ϨΠϠʔؒͷσʔλͷड͚͠ ʹΉ
BQQMJDBUJPO4FSWJDFͰQSFTFOUBUJPOͷEUPʹ σʔλΛ٧ΊΔʁґଘͷ͖߹ͬͯΔ ॴײ ΞʔΩςΫνϟฤ TSDNBJOKBWB cBQQMJDBUJPOTFSWJDF cEPNBJO cNPEFM cTFSWJDF cFYDFQUJPO cJOGSBTUSVDUVSF cSFQPTJUPSZ cQSFTFOUBUJPO cFYDFQUJPO cBQJ cEUP
ྑ͍ͱײ͡Δ໘ w &OUJUZ͕ΦϒδΣΫτࢦ͍ͯ͠Δײ FOUJUZͷৼΔ͍ͱͯ͠ఏڙ͞ΕΔϝιου͔Βঢ়ଶ Λมߋ TFUUFSͷ༻ Λ͢Δͷ001ͩͳͱࢥ͏ w &OUJUZΛಡΊ͍͍ͱ͍͏҆৺ײ อकۀʹෳࡶͳΫΤϦͷղಡؚ͕·Ε͍ͯͳ͍͜ͱ
͕อূ͞Ε͍ͯΔ͜ͱਫ਼ਆӴੜ্ྑ͍ w $234ͰNPEFMΫϥε ෳࡶͳ SFQPTJUPSZ͔Βͷղ์ SFQPTJUPSZΛԚ͢ݪҼෳࡶͳRVFSZͰӬଓԽͰͳ ͘6*ͷ߹͔ͩΒׂΓͬͯRVFSZ4FSWJDFΛ࡞Δͱ͍ ͏ߟ͑ํଥੑ͕͋Δͱࢥ͏ ॴײ %%%ฤ @Entity class Task { @Id @GeneratedValue private Long id; private TaskStatus taskStatus; private String name; private int postponeCount; private static final int POSTPONE_MAX_COUNT = 3; /* * ίϯετϥΫλɿ ΤϯςΟςΟ࡞࣌ͷෆม݅Λදݱ */ public Task(String name, LocalDate dueDate) { if (name == null || dueDate == null) { throw new IllegalArgumentException("ඞਢ"); } this.name = name; this.taskStatus = TaskStatus.UNDONE; this.postponeCount = 0; } }
ѱ͍ͱײ͡Δ໘ ఆ w ΠϯϐʔμϯεϛεϚονͷղফ ͕໘͍͘͞ w ूͷΓํ͕%#ͷϞσϦϯά ʹҾͬுΒΕΔ w σʔλΞΫηεͷύϑΥʔϚϯε
ѱͦ͏ ॴײ %%%ฤ !3FQPTJUPSZ QVCMJDDMBTT3FQPTJUPSZ*NQMJNQMFNFOUT3FQPTJUPSZ\ !"VUPXJSFE 1SJWBUF.PPE.BQQFSQPTU.BQQFS QVCMJDWPJETBWF 1PTUQPTU \ QPTU.BQQFSTBWF NPPE -JTU4USJOHJETNPPEHFU.PPE*E TUSFBN fi MUFS MJLF NPPEHFU-JLFT DPOUBJOT MJLF DPMMFDU $PMMFDUPSTUP-JTU -JTU-JLFMJLFTMJLF.BQQFS fi OE#Z*E JET MJLFTGPS&BDI M\ MJLF.BQQFSTBWF M ^ ^ ^
Ҏ্Ͱ͢ ۜͷؙ͕ཉ͍͠