ドメイン駆動設計実践入門
υϝΠϯۦಈઃܭΤϯδχΞͷͨΊͷυϝΠϯۦಈઃܭ࣮ફೖ!TNENUT
View Slide
ࣗݾհw ౡాխ!TNENUTw ιϑτΣΞΤϯδχΞw 4DBMBc1ZUIPOc(PMBOHc+BWBc%%%w גࣜձࣾΤϒϦʔॴଐw %&-*4),*5$)&/σʔλੳܥશൠ୲w ओʹੳج൫ɺ৴໘࠷దԽͳͲΛ୲
ΞδΣϯμʢ֓ཁʣࠓͷυϝΠϯۦಈઃܭΛར༻ͨ͠ɺΞϓϦઃܭઓུʹ͍ͭͯͷͱͳΓ·͢ɻʮΤϯδχΞͷͨΊͷυϝΠϯۦಈɾ࣮ફೖʯઓུɾઓज़ʹ͓͚ΔઓུͷͷͨΊɺཧઃܭɺ֎෦ઃܭɺίʔσΟϯάͳͲͷग़͖ͯ·ͤΜɻ
ΞδΣϯμʢରυϝΠϯུ֓ʣ͋ͳͨιʔγϟϧήʔϜۀքʹॴଐ͍ͯ͠·͢ɻιϑτΣΞઃܭٴͼίʔσΟϯά୲ͷιϑτΣΞΤϯδχΞͰ͢ɻొਓɿɹܾࡋऀʢϓϩμΫτΦʔφʔʢ10ʣɹاը୲ऀʢυϝΠϯΤΩεύʔτ %&ʣɹιϑτΣΞΤϯδχΞʢϓϩάϥϚ 1(ʣ
ΞδΣϯμʢొਓʣ10%&1(γεςϜશମʹΛ࣋ͭਓɻച্͛ɾ༷શൠʹ͍ͭͯΛ࣋ͭ߹͕ଟ͍ɻγεςϜͷ༷ۀӡ༻ʹΛ࣋ͭਓɻӡ༻্ͷɾ༷ʹΛ࣋ͭ߹͕ଟ͍ɻγεςϜͷ࣮ɾγεςϜӡ༻ʹΛ࣋ͭਓɻઃܭ͓Αͼ࣮ʹΛ࣋ͭɻ֤৬݉͞ΕΔ߹͋Δɻ
ΞδΣϯμ̍จ຺ʢίϯςΩετʣ̎จ຺ͷਤʢίϯςΩετϚοϓʣิ֓೦Ϟσϧ
จ຺ʢίϯςΩετʣ̍จ຺ʢίϯςΩετʣ̎จ຺ͷਤʢίϯςΩετϚοϓʣิ֓೦Ϟσϧ
จ຺ʢίϯςΩετʣ8FCܥͷଟ͘ͷ։ൃݱʹ͓͍ͯɺ͋Δ༷ΛՃ͢Δ͜ͱʹͳͬͨ߹ɺҎԼͷΑ͏ͳۀϑϩʔ͕ྲྀΕΔ͜ͱ͕ଟ͍Ͱ͢ɻ10 %& 1(৽ػೳ࡞Γ͍ͨػೳৄࡉߟ͑ΔͧͲͷΑ͏ʹ࣮͠Α͏
͜ͷҰ࿈ͷϑϩʔͷ͜ͱΛίϯςΩετͱݺͼ·͢ɻίϯςΩετͱɺ͢͡Έͪɾ຺བྷɻ·ͨɺ͋Δࣄฑͷഎܠपลͷঢ়گͷ͜ͱɻ10 %& 1(৽ػೳ࡞Γ͍ͨػೳৄࡉߟ͑ΔͧͲͷΑ͏ʹ࣮͠Α͏จ຺ʢίϯςΩετʣ
υϝΠϯۦಈઃܭ͋Δʹ৽ػೳͱͳΔɺۄͱͳΔػೳΛಋೖ͢ΔࣄʹͳΓ·ͨ͠ɻطʹଘࡏ͢ΔΧʔυήʔϜͰ৽༷ͱͯ͠ɺʮΞόλʔʯΛՃ͢Δ͜ͱʹͳͬͨͱ͠·͢ɻ
ొਓͷೝߦಈ10%&1(ʮΞόλʔΛಋೖ͢Δʂʯɹۄʹͯ͠ϢʔβՁʢ-57ʣ্Λࢦ͢ʮΞόλʔͷΠέͯΔ༷Λߟ͑Δʂʯɹໃ६ͷͳ͍༷Λࢦ͢ʮΞόλʔͷγεςϜઃܭΛߟ͑Δʂʯɹໃ६ͷͳ͍ઃܭΛࢦ͢
ొਓͷೝߦಈ%& Ξόλʔ͔͋͘Δ͖ɻɾ̍ਓ̍ମʢஉPSঁʣΛ࣋ͯͳ͚ΕͳΒͳ͍ɾணͤସ͑ΒΕͳ͚ΕΒͳ͍ɾ171ͷύϥϝʔλʹͳΒͳ͚ΕͳΒͳ͍ɾ(7(ͷύϥϝʔλʹͳΒͳ͚ΕͳΒͳ͍ɾ͔ͬ͜Α͘PS͔Θ͍͘ͳ͚ΕͳΒͳ͍ɾήʔϜΛΓ্͛ͳ͚ΕͳΒͳ͍ɾചΕ͓ͯۚʹͳΒͳ͚ΕͳΒͳ͍ɾإɺഎܠͳͲΛม͑ΒΕͳ͚ΕͳΒͳ͍
γεςϜઃܭͱ͔͋͘Δ͖ɻొਓͷೝߦಈɾଵଦɿ༷มߋΛʮָʯΛ͢Δʂɾؾɿ༷Λʮᘳʯʹຬͨ͢ʂɾၗຫɿՄೳͳݶΓʮૣ͘ʯΛ࡞Δʂ1(ϓϩάϥϚʔࡾେඒಙ
͜͜Ͱ͍͏ɺɹʮໃ६ʯͱԿͷ͜ͱͰ͠ΐ͏ʁొਓͷೝߦಈ%&1(ʮΞόλʔͷΠέͯΔ༷Λߟ͑Δʂʯɹໃ६ͷͳ͍༷Λࢦ͢ʮΞόλʔͷγεςϜઃܭΛߟ͑Δʂʯɹໃ६ͷͳ͍ઃܭΛࢦ͢
ొਓͷೝߦಈʮໃ६ʯͱιϑτΣΞΛ։ൃ͢ΔɺεςʔΫϗϧμؒͷʮҙࣝͷζϨʯͷ͜ͱɻ༷ܾఆͰೝͷζϨΛճආ͢Δࣄ͕ॏཁͱͳΓ·͢ɻ10 1(%&
1(%&ొਓͷೝߦಈೝͷζϨΛͳͨ͘͢ΊʹɺεςʔΫϗϧμؒͰʮձʯ͢Δ͜ͱ͕࠷ॏཁɻιϑτΣΞͱձͰΓཱ͍ͬͯΔ
ొਓͷೝߦಈձ࣌ͱͯ͠৫Ͱ͔͠௨͡ͳ͍ɺઐ༻ޠͰޠΒΕΔࣄ͕͋Γ·͢ɻ͜ΕΛʮϢϏΩλεݴޠʯͱݺͼ·͢ɻ10 1(%&
͋Δͷ༷ܾΊͷ࠷தʹɺ͜ͷΑ͏ͳձ͕܁Γ͛ΒΕ·ͨ͠ɻϢϏΩλεݴޠʢೝϨϕϧʣ%&ʮثͳͯ͘େৎʁʯ1(ʮ͑ͬɺث͕ͳ͍ͬͯʁʁʁʯ
%&ʮثͳͯ͘େৎʁʯͱʁϢϏΩλεݴޠʢೝϨϕϧʣ
ೝϨϕϧͰҎԼ͕ൈ͚͍ͯΔʮث͕എޙʹӅΕ͍ͯΔʯʮث͕ૉखʯ%&ʮثͳͯ͘େৎʁʯͱʁϢϏΩλεݴޠʢೝϨϕϧʣ
৽ͨͳϢϏΩλεݴޠ͕ੜ͠·ͨ͠ɻഎதثɺάϩʔϒϢϏΩλεݴޠʢೝϨϕϧʣ
ίϯςΩετʢ·ͱΊʣɾίϯςΩετͱ࣮ݱ͍ͨ͠ۀػೳͦͷͷɾίϯςΩετεςʔΫϗϧμͱͷؒͰɺϢϏΩλεݴޠʹΑͬͯߏங͞ΕΔ㱺ೝͷζϨϢϏΩλεݴޠͷߏஙͰճආ͞ΕΔɾϢϏΩλεݴޠͱιϑτΣΞͷݪྉͦͷͷ
จ຺ͷͭͳ͗ʢίϯςΩετϚοϓʣ̍จ຺ʢίϯςΩετʣ̎จ຺ͷਤʢίϯςΩετϚοϓʣิ֓೦Ϟσϧ
ίϯςΩετϚοϓͱɾίϯςΩετͷू߹Ͱ֤ίϯςΩετ͕ɺͲͷΑ͏ʹػೳ͢Δ͔Λࣔ͢γεςϜͷ၆ᛌਤɾαʔϏενʔϜׂɺίϯςΩετϚοϓʹΑΔׂͰൃੜ͢Δ
ΞόλʔՃʹ͓͚Δ৽ུ༷֓ɾ171ͷύϥϝʔλʹͳΒͳ͚ΕͳΒͳ͍ɾ(7(ͷύϥϝʔλʹͳΒͳ͚ΕͳΒͳ͍ɹʢઓಆྗύϥϝʔλΧʔυʹΑܾͬͯ·ΔʣɾإɺഎܠͳͲΛม͑ΒΕͳ͚ΕͳΒͳ͍171 (7(
ίϯςΩετϚοϓʢ༷Ճલʣܝࣔ൘Ψνϟਐܸ νʔϜ3BJE(7(γϣοϓσοΩڧԽϩά ௨՝ۚΧʔυ੩తίϯςϯπ ಈతίϯςϯπඇػೳܥίϯςϯπ
ίϯςΩετϚοϓʢ༷Ճޙʣܝࣔ൘Ψνϟਐܸ νʔϜ3BJE(7(γϣοϓσοΩڧԽϩά ௨՝ۚΧʔυ੩తίϯςϯπ ಈతίϯςϯπඇػೳܥίϯςϯπΞόλʔணͤସ͑171
ίϯςΩετϚοϓʢ171BOE(7(ʣΞόλʔͷڧ͕͞ɺ171ʢݸਓઓʣ(7(ʢνʔϜઓʣͷڧ͞ʹӨڹ͢Δ߹ɺͲͷΑ͏ʹઃܭ͢Δ͖Ͱ͠ΐ͏͔ɻ171 (7(
Χʔυ171 (7(Ξόλʔ ΧʔυΞόλʔ Χʔυૉࡐ ύϥϝλૉମ Ԟٛύϥϝλ ΞϏϦςΟΞόλʔίϯςΩετϚοϓʢ171BOE(7(ʣઃܭॳɺҎԼΑ͏ͳίϯςΩετϚοϓΛఆͯ͠ਤΛඳ͍ͯݟ·ͨ͠ɻ
ίϯςΩετϚοϓʢ171BOE(7(ʣΧʔυΞόλʔύϥϝλύϥϝλԞٛ ΞϏϦςΟઓಆྗ͕ΞόλʔͱΧʔυʹΑΓΓཱ͓ͬͯΓɺΞόλʔͱΧʔυҎԼͷ௨Γ&OUJUZΛอ͍࣋ͯ͠·͢ɻʢ&OUJUZɿʮ࿈ଓੑʯͱʮಉҰੑʯΛอূ͢Δʣ
ίϯςΩετϚοϓʢ171BOE(7(ʣ171(7( ΧʔυYΞόλʔO݅ʢࣗਞӦʣΧʔυYΞόλʔO݅ʢఢਞӦʣΧʔυYΞόλʔ݅ʢࣗʣΧʔυYΞόλʔ݅ʢఢʣػೳؒԣஅͰਤΛॻ͘ͱҎԼͷΑ͏ʹͳΓ·ͨ͠ɻ
ίϯςΩετϚοϓʢ171BOE(7(ʣΧʔυYΞόλʔ171ͱ(7(ͷؒʹɺΧʔυYΞόλʔΛ௨ͨ͠ɺ૬͕ؔؔ͋Δࣄ͕ൃ֮͠·ͨ͠ɻΧʔυYΞόλʔͷ&OUJUZͷू߹ɺ171ɺ(7(ʹඞཁͳʮෆมతཁૉʯ
ίϯςΩετϚοϓʢ171BOE(7(ʣΧʔυYΞόλʔ171(7(ΧʔυYΞόλʔͷύϥϝʔλɺ171ͱ(7(ͷύϥϝʔλʹ૬ؔ͢Δࣄ͕ൃ֮͠·ͨ͠ɻ͜ΕίϯςΩετͷհऀͰ͋ΔࣄΛ͍ࣔࠦͯ͠·͢ɻ
ίϯςΩετϚοϓʢ171BOE(7(ʣ$PNCBU1PXFSΧʔυYΞόλʔΛʮ$PNCBU1PXFSʯͱ໊લʢϢϏΩλεݴޠʣΛ͚ͯ&OUJUZԽͯ͠Έ·ͨ͠ɻػೳԣஅ͕༰қʹͳΔυϝΠϯΦϒδΣΫτΛݟ͚ͭΔ͜ͱΛʮϒϨΠΫεϧʔʯͱݺͼ·͢ɻԾʹকདྷൃੜ͢Δ༷มߋͰɺΧʔυͱΞόλʔҎ֎ͷԿΒ͔ͷཁૉ͕ग़ݱͨ͠ͱͯ͠ɺʮ$PNCBU1PXFSʯʹΧϓηϧԽͯ͠ด͡ࠐΊΔ͜ͱ͕ՄೳͱͳΓ·͢ɻ
ίϯςΩετϚοϓʢ171BOE(7(ʣ171(7(171ͱ(7(ͷؒʹԿΒ͔ͷ૬ؔؔͳ͍Ͱ͠ΐ͏͔ʁ$PNCBU1PXFS
ίϯςΩετϚοϓʢ171BOE(7(ʣ171(7(༷ͱͯ͠ଘࡏ͠·ͤΜɻ͔͠͠ɺ171ͱ(7(ʹԿΒ͔ͷ૬ؔؔΛՃ͑ͨΒήʔϜ͕໘ന͘ͳΔՄೳੑ͕͋Γ·͢ɻ㱺υϝΠϯΦϒδΣΫτ͕໌֬ʹͳΔͱ࣌ͱͯ͠ࢥ͍͕͚ͳ͍ಉ͕࢜ؔ࿈͚ΒΕɺ৽Ϗδωεʹൃల͢Δ͜ͱ͕͋Γ·͢ɻ
ίϯςΩετϚοϓʢ171BOE(7(ʣ171(7($1֤ػೳؒͷڥքʮڥք͚ͮΒΕͨίϯςΩετʯͱݺͼ·͢ɻ͜ͷΑ͏ʹίϯςΩετϚοϓΛॻ͘͜ͱʹΑΓɺػೳͷڥք͕໌֬ͱͳΓʮ͠ͳ͔ͳઃܭʯͱʮਂ͍ಎʯʹܨ͕Γબͱूத͕༰қͱͳΓ·͢ɻ࣮ࡍͷγεςϜͷ&OUJUZɺ୯ಠͰදݱͰ͖ͣɺԿΒ͔ͷ૬ؔΛ͍࣋ͬͯΔ߹͕ଟ͋͘Γ·͢ɻ
ίϯςΩετϚοϓʢ·ͱΊʣɾγεςϜͷػೳΛύλʔϯࣝผͯ͠ɺྨͯ͠நग़͞ΕΔਤͷΑ͏ͳͷ㱺ύλʔϯࣝผ͘͢͝େมͳߦҝɻಥવ߱ͬͯ͘ΔɻɾίϯςΩετϚοϓΛॻ͘͜ͱͰɺϏδωεͷબͱूதͷஅࡐྉʹͳΔ㱺֓೦Ϟσϧͷઃܭʹͭͳ͕Δɾ໊લΛ͚ΔաఔͰໃ६ෆ͕ൃ֮͢Δ㱺໊લΛ͚ͭΔ͜ͱͰ༷͕໌֬ʹͳΔ
֓೦Ϟσϧ̍จ຺ʢίϯςΩετʣ̎จ຺ͷਤʢίϯςΩετϚοϓʣิ֓೦Ϟσϧ
υϝΠϯۦಈઃܭୈೋ෦Ϟσϧۦಈઃܭʢิʣ֓೦Ϟσϧ
ʢิʣ֓೦ϞσϧίϯςΩετϚοϓΛඳ͍ͨޙʹɺ֤ৄࡉΛઃܭ͢Δ͜ͱʹͳΓ·ͨ͠ɻ͜ͷষͰυϝΠϯۦಈઃܭ ୈೋ෦ϞσϧۦಈઃܭΛݩʹઃܭ͞ΕͨΞόλʔʹ͍ͭͯղઆ͍͖ͤͯͨͩ͞·͢ɻ
֓೦Ϟσϧ1BDLBHFʢϞδϡʔϧʣ&OUJUZʢࢀরΦϒδΣΫτʣ7BMVF0CKFDUʢΦϒδΣΫτʣ4FSWJDFʢαʔϏεʣ֓೦ϞσϧͱγεςϜͷ֓೦ͦͷɻݸʑͷཁૉશͯϢϏΩλεݴޠʹΑΓߏங͞Ε·͢ɻ֓೦Ϟσϧ
&OUJUZʢࢀরΦϒδΣΫτʣɾ࿈ଓੑͱಉҰੑΛཧ͢Δ㱺͕࣌ؒܦͬͯಉ͡ܗͰදݱ͞ΕΔɾओཁͳఆ͕ٛଐੑʹΑͬͯఆٛ͞ΕͣɺͦΕ͕ԿऀͰ͋Δ͔͕த৺ʹ͋Δɾͨͱ͑ɺਓɺࢢɺࣗಈंͳͲ㱺Ճྸͯ͠ɺ"͞Μ"͞Μɻ
&OUJUZʢࢀরΦϒδΣΫτʣҰྫͱͯ͠ϓϨΠϠʔ͕อ࣋͢ΔΞόλʔ͕ɺҎԼͷΑ͏ͳ࢟ͩͬͨ߹ɺ֓ͶҎԼͷ&OUJUZͷू߹ͰදݱͰ͖·͢ɻૉମ&OUJUZੑผɾإछྨૉࡐϧʔτ&OUJUZૉࡐछྨɾੑผछผɾίʔυૉࡐʢʣૉࡐʢʣૉࡐʢثʣૉࡐʢഎܠʣ
7BMVF0CKFDUʢΦϒδΣΫτʣɾ֓೦తͳಉҰੑ͕ͳ͘ࣄͷಛΛ࣋ͭɾଐੑ͔ؔ͠৺ͷରͱͳΒͳ͍ɾͨͱ͑ɺΞόλʔͰଐੑΛ߹ͨ͠㱺ૉମʢஉੑʣʴૉࡐʢεφΠύʔʣʴٱɹͳͲͷଐੑ͔Β૯ઓಆྗ͕ࢉग़͞ΕΔ
7BMVF0CKFDUʢΦϒδΣΫτʣΞόλʔͷઓಆྗΛදݱ͢Δ߹ɺ֤&OUJUZʹΑͬͯΦϒδΣΫτ͕ߏங͞Ε·͢ɻϓϨΠϠʔͷઓಆྗ֤&OUJUZʹΑΓࢉग़͞Ε·͢ɻϓϨΠϠʔΦϒδΣΫτૉମ&OUJUZૉࡐϧʔτ&OUJUZମྗ&OUJUZٱ&OUJUZઓಆྗࢉग़ϝιου
4FSWJDFʢαʔϏεʣɾ࣌ʹɺ୯७ʹʮʯͱදݱग़དྷͳ͍͜ͱ͋ΔɾυϝΠϯʹ͓͚Δॏཁͳϓϩηεมॲཧ͕ɺ&OUJUZΦϒδΣΫτͷࣗવͳͰͳ͍߹ɺϢϏΩλεݴޠͷҰ෦ͱͯ͠ఆٛ͞ΕΔɾͨͱ͑ɺਓͰ"͞Μʹى͖ΔԿ͔ͷࣄฑ৯Δɺࣄ͢Δɺઓ͏ͱ͍ͬͨࣄͷ͜ͱɾ$MFBO"SDIJUFDUVSFͰ6TF$BTFͷ͜ͱ
4FSWJDFʢαʔϏεʣྫ͑ɺҎԼͷ௨ΓΞόλʔಉ͕࢜ઓ͏ͱ͢Δͱɺҙຯͱͯ͠ʮʯͰͳ͘ʮࣄʯͱͳΓ·͢ɻ͜ͷ߹4FSWJDFͱͯ͠ఆٛͨ͠ํ͕ࣗવͰ͢ɻ
ʢิʣ֓೦ϞσϧɾϢϏΩλεݴޠͷʮʯʮৼΔ͍ʯ͕ఆٛ͞ΕΔɾۀͰॏཁͳؔ৺ࣄΛཁͨ͠㱺υϝΠϯΤΩεύʔτ͕֓೦ϞσϧΛཧղͰ͖ͳ͍߹ɺ֓೦ϞσϧͦͷͷʹԿΒ͔ͷ͕͋ΔͷͰཁҙɾ֓೦Ϟσϧۀ͕ܧଓ͢ΔݶΓෆ໓㱺γεςϜج൫มΘͬͯ֓೦ϞσϧมΘΒͳ͍ྫ͑ɺۜߦόοΫۀੲ͔ΒຆͲมΘΒͳ͍
·ͱΊɾυϝΠϯۦಈͱɺϏδωεͷจ຺Λ֓೦Ϟσϧʹ༁͢ΔϑϨʔϜϫʔΫɾΤϯδχΞҎ֎ΛؚΉνʔϜϝϯόʔ͕ɺϢϏΩλεݴޠͰ֓೦ϞσϧΛٞ͢ΔΑ͏ʹͳΔͱɺઃܭͷΛ͑ͯϏδωεʹਂ͍ಎΛੜΉ͜ͱ͕͋Δɻɾ͋ͳ͕ͨ୲͍ͯ͠ΔγεςϜͷɹ֓೦ϞσϧʢυϝΠϯΦϒδΣΫτʣΛ୳ͯ͠ΈΑ͏ɻɹ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠