リアーキテクチャによってどうなりたいか
2023/09/14
asken withミライトデザインのDDDのはじめ方 DDD x RDRA x ICONIX https://asken.connpass.com/event/293085/
ϦΞʔΩςΫνϟʹΑͬͯͲ͏ͳΓ͍͔ͨԿΛ͚ͯɺԿΛڞ༗͢Δ͔2023/09/14ϛϥΠτσβΠϯɹ΄͛͞Μ
View Slide
؆୯ʹࣗݾհ
suzuki-hoge ( ΄͛͞Μ )όοΫΤϯυ։ൃ 12 ͘Β͍
Zenn Ͱ Book Λॻ͍ͨΓ
YouTube Ͱมͳ͜ͱͬͨΓ
࠷ۙͪΐͬͱӫཆΛؾʹͯ͠·͢
ϨΠϠʔɾύοέʔδɾΫϥεͷ͚ํ
ࣗͷϓϩδΣΫτͷߏΛઆ໌Ͱ͖·͔͢ʁ
͜Ε DB ಡΈॻ͖͢Δͱ͖ʹॻͭ͘͜ΕݖݶνΣοΫ͢Δͱ͖ʹॻͭ͘
Ͳ͏ͯͦ͠͏ͳ͍ͬͯΔ͔આ໌Ͱ͖·͔͢ʁ
ࠓճͷϦΞʔΩςΫνϟͷݕূϑΣʔζͰௐதͷߏ
PresentationApplication InfrastructureDomainQueryService QueryServiceImplRepositoryUseCaseRequestControllerRepositoryImplFactoryDomainServiceूInterfaceClass
ίʔυڊେͳ͔ͨ·ΓΛॱΛͬͯղͯ͠ɺͲ͏͖ͯ͠͞΄ͲͷਤʹͳΔ͔͓͠·͢
͚Δͱڞ༗͢Δʹͯ͠ߟ͑Δ
͓அΓ
Repository ू ͳͲͷ୯ޠฉ͍ͨ͜ͱ͋Δͱ͍͏લఏͰਐΊ·͢
Ұ෦ύοέʔδ࣌ؒͷ߹ͰৄࡉΛׂѪ͠·͢ޙϊʔΧοτεϥΠυΛΞοϓ༧ఆͰ͢ͷͰɺΑ͚ΕͦͪΒΛ͝ཡ͍ͩ͘͞
͚Δ
ྫ͋ΔֶߍͷੜెΛ͚͍ͨ
A ͞Μ B ͞Μ C ͞Μ D ͞ΜͲ͏͚ͬͯΔ͔
A ͞Μ B ͞Μ C ͞Μ D ͞Μਐ࿏૬ஊΛ͢Δ͔Βઐ߈ผʹ͚Δจܥ ཧܥ
A ͞Μ B ͞Μ C ͞Μ D ͞Μ෦׆ಈର߅ϦϨʔΛ͢Δ͔Β෦׆ผʹ͚Δٿ෦ όεέ෦ ςχε෦
͚Δͱ͖త͕͋Δ
ͰίʔυΛ͚Δత
1. ϏδωεͱίʔυΛ࿈ಈ͍͔ͤͨ͞Β2. ͘։ൃͰ͖ΔΑ͏ʹ͍͔ͨ͠Β
1. ϏδωεͱίʔυΛ࿈ಈ͍ͤͨ͞
Ͳ͏ͯ͠࿈ಈ͍͔ͤͨ͞γεςϜར༻ऀasken ༷ͷαʔϏε
γεςϜϏδωεͷͨΊʹ͋ΔγεςϜར༻ऀasken ༷ͷαʔϏεͻͱͼͱͷ໌ΛࠓΑΓ݈߁ʹ͢ΔϏδωεαΠυاըɾӡӦɾӦۀɾੳ
ϏδωεΛແࢹͨ͠։ൃͰ͖ͳ͍γεςϜར༻ऀϏδωεαΠυ ։ൃऀasken ༷ͷαʔϏεاըɾӡӦɾӦۀɾੳ ։ൃ
ίʔυڞ༗Ͱ͖ͳ͍͔ΒυϝΠϯࣝͱͯ͠ڞ༗͢ΔγεςϜར༻ऀasken ༷ͷαʔϏεϏδωεαΠυ ։ൃऀυϝΠϯࣝ
ͰϏδωεͷίʔυͱ
ಉ͜͡ͱΛ࣮ݱ͢Δ 2 ͭͷίʔυ৯ࣄهྻ<औಘ औಘ औಘ >GPS৯ࣄهJO৯ࣄهྻ\JG৯ࣄه৯ࣄJTOVMM\CSFBL^^ࠓͷΞυόΠεεςʔλεอଘ ࠓͷΞυόΠε̏৯ͷ৯ࣄهऔಘ JG̏৯ͷ৯ࣄهશͯೖྗࡁ \ࠓͷΞυόΠεදࣔղې ^อଘ ࠓͷΞυόΠε
ίʔυΛඇΤϯδχΞʹઆ໌ͯ͠ΈΔશͯͷ৯ࣄهͷɺ͋ɺேன൩͕ͳΜͰ͚͢ͲɺͦΕͷશ෦ͷ৯ࣄ͕࣌ؒOVMM͡Ό͋ͳ͚Εɺͭ·Γ৯ࣄΛه͍ͯ͠ΔͬͯΈͳͤΕɺΞυόΠεͷදࣔεςʔλεʹΛೖͯ͠อଘ͠·̏͢৯ͷ৯ࣄهΛऔಘ͠ɺͦΕ͕શͯೖྗࡁͳΒɺΞυόΠεΛදࣔղېͱͯ͠อଘ͠·͢
զʑ։ൃऀ͕Δ͜ͱ݅ʹԠͯ͡ΞυόΠεͷදࣔΛղې͢Δ͜ͱͰ͋ͬͯஅͯ͡ 2 Λೖ͢Δ͜ͱͰͳ͍
આ໌͠ͳ͔ͬͨ͜ͱɾઆ໌ͨ͜͠ͱɾσʔλߏɹɾேன༦ͷࣝผํ๏ɹɾԿΛ࣋ͬͯೖྗࡁΈͱ͢Δ͔ɹɾද੍ࣔޚΛͲ͏࣮ݱ͍ͯ͠Δ͔ɾॲཧͷৄࡉϑϩʔɹɾGPSจCSFBLจɾ̏৯ͷ৯ࣄه͕ඞཁͰ͋ΔɾશͯೖྗࡁΈͰͳ͍ͱ͍͚ͳ͍ɾΞυόΠεͷද͕ࣔղې͞ΕΔγεςϜͷͨΊͷίʔυ ϏδωεͷͨΊͷίʔυ͕͜͜υϝΠϯͷίʔυ
ϏδωεͷίʔυΛDomain ύοέʔδʹ·ͱΊ͓ͯ͘ͱڞ༗͍͢͠
ύοέʔδਤʹө
ͦΕҎ֎DomainίʔυίʔυɾϏδωεͷͨΊͷίʔυɾυϝΠϯΛ࿈ܞͤ͞ΔͨΊͷίʔυɾHTTP ϦΫΤετͷͨΊͷίʔυɾσʔλϕʔεಡΈॻ͖ͷͨΊͷίʔυ
2. ͘։ൃͰ͖ΔΑ͏ʹ͍ͨ͠
Ϗδωεͷίʔυ͚͓͚͍͍ͩͯ͠ͷ͔
͠େ͖ͳίʔυϒϩοΫʹ͍Ζ͍Ζͳίʔυ͕͍ࠞͬͯͨ͡Β
͋Δཧ༝Ͱมߋ͢Δͱ͜Ζࠓճมߋ͠ͳ͍ͱ͜Ζ
৺͔ͩΒςετ͢Δͱ͜Ζ
৺͔ͩΒςετ͢Δͱ͜Ζ͍ʔཧ۶ͰେৎͳΜͰ͚͢ͲɺԿ͕ى͖Δ͔Θ͔Βͳ͍ͷͰͪΐͬͱ...ࡉ͔͘ௐͯΈͳ͍ͱͳΜͱ...
͋Δཧ༝Ͱมߋͨ͠ͱ͜Ζ...??ࠓճมߋ͠ͳ͔ͬͨͱ͜Ζ...??৺͔ͩΒςετ͢Δͱ͜Ζ
ؔͳ͍ͣͷίʔυ·ͰௐͨΓςετͨ͠Γ͢Δ→ ։ൃ͕Լ͢Δ
มߋͷཧ༝͕ҧ͏ͱมߋ͕ಉ࣌ൃੜ͢ΔՄೳੑ্͕ΓɺௐϚʔδ͕ෳࡶԽ͢Δ→ ։ൃ͕Լ͢Δ
ςετ͢Δͱ͜Ζ͋Δཧ༝Ͱมߋ͢Δͱ͜Ζࠓճมߋ͠ͳ͍ͱ͜Ζ͕͢͞ʹେৎͰ͠ΐ
υϝΠϯΫϥεͷߏͱDB ͷσʔλߏΛ͚Δ
εςʔλε ( Int )status1231 // ਃࠐத2 // ར༻த3 // ୀձࡁ// ར༻தͷ߹if user.status == 2 { ... }
εςʔλε ୀձਃࠐ122 2023/09/083 2023/09/01ୀձॲཧதه͚͍͍͚ͭͯͲίʔεมߋͰ͖ͳ͍ͨ͘͠ୀձॲཧத... 2 ͷ͏ͪୀձਃࠐ͕ຒ·ͬͯΔਓͬͯ͜ͱ͔...
εςʔλε ( Int )1 // ਃࠐத2 // ར༻த3 // ୀձࡁ// ར༻தͷ߹if user.status == 2 && user.date != null { ... }εςʔλε ୀձਃࠐ122 2023/09/083 2023/09/01
εςʔλε ( Int )1 // ਃࠐத2 // ར༻த3 // ୀձࡁ// ར༻தͷ߹if user.status == 2 && user.date != null { ... }εςʔλε ୀձਃࠐ122 2023/09/083 2023/09/01͏ͦ͡ΌΜʂ
ྫ͑ΤσΟλͰΫϥεͷߏΛϦϑΝΫλϦϯάͨ͠ͱ͖ʹɺDB ϚΠάϨʔγϣϯ·ͣ͠ͳ͍υϝΠϯͷߏͱ DB ͷσʔλߏઈରʹ࿈ಈ͠ͳ͍
ͣΕ͍ͯ͘ͷΛ͚͍ͯͳ͍ͱࣄނ͕ى͖Δฉ͍ͯͨͱಡΜͩίʔυ͕ҧ͏ͷͰށ͏→ ։ൃ͕Լ͢Δ
εςʔλε ( Enum )ਃࠐதར༻தୀձॲཧதୀձࡁ// ར༻தͷ߹if user.status.ར༻த { ... }εςʔλε ୀձਃࠐ122 2023/09/083 2023/09/01
ύοέʔδਤΛ֬ೝ
ͦΕҎ֎DomainίʔυίʔυDB ͷߏͱΓ͓ͯ͘͠
υϝΠϯΫϥεΛ࡞ͬͨΒखଓ͖ͱ DB ૢ࡞Λ͚Δ
υϝΠϯΫϥεΛ͏खଓ͖ͷίʔυઈରʹඞཁ
͜͠ͷखଓ͖ͷίʔυʹσʔλϕʔεͷॲཧ͕͍ࠞͬͯͨ͡Β
DPOODSFBUF$POOFDUJPO σʔλDPOORVFSZ TFMFDUGSPNSFDPSETXIFSF̏৯ͷ৯ࣄهOFX̏৯ͷ৯ࣄهσʔλ OFX৯ࣄهσʔλ σʔλ<>JE σʔλ<>EBUF σʔλ<>DBMPSJF OFX৯ࣄهσʔλ σʔλ<>JE σʔλ<>EBUF σʔλ<>DBMPSJF OFX৯ࣄهσʔλ σʔλ<>JE σʔλ<>EBUF σʔλ<>DBMPSJF ΞυόΠεOFXΞυόΠε DPOORVFSZ TFMFDUGSPNSFDPSETXIFSF<>JE JG̏৯ͷ৯ࣄهશͯೖྗࡁ \ΞυόΠεදࣔղې ^DPOOFYFDVUF VQEBUFBEWJDFTFUTUBUVT XIFSFJE ΞυόΠεTUBUVT ΞυόΠεJE
DPOODSFBUF$POOFDUJPO σʔλDPOORVFSZ TFMFDUGSPNSFDPSETXIFSF̏৯ͷ৯ࣄهOFX̏৯ͷ৯ࣄهσʔλ OFX৯ࣄهσʔλ σʔλ<>JE σʔλ<>EBUF σʔλ<>DBMPSJF OFX৯ࣄهσʔλ σʔλ<>JE σʔλ<>EBUF σʔλ<>DBMPSJF OFX৯ࣄهσʔλ σʔλ<>JE σʔλ<>EBUF σʔλ<>DBMPSJF ΞυόΠεOFXΞυόΠε DPOORVFSZ TFMFDUGSPNSFDPSETXIFSF<>JE JG̏৯ͷ৯ࣄهશͯೖྗࡁ \ΞυόΠεදࣔղې ^DPOOFYFDVUF VQEBUFBEWJDFTFUTUBUVT XIFSFJE ΞυόΠεTUBUVT ΞυόΠεJEɹυϝΠϯΛ͏ͨΊͷίʔυͳͷʹɹυϝΠϯͬͯΔͷ͚ͩ͜͜
ࡶ
ύοͱݟͯυϝΠϯ͕ຒΕ͍ͯΔͱʮ͜ͷ API ͳΜ͚ͩͬʯͱͳΔ→ ։ൃ͕Լ͢Δ
υϝΠϯΛ͏खଓ͖ͷ෦Λ UseCase ͱ͠ɺϞσϧΛಡΈॻ͖͢Δ෦Λ Repository ͱ͢Δ
̏৯ͷ৯ࣄه৯ࣄ3FQPTJUPSZGJOE ΞυόΠεΞυόΠε3FQPTJUPSZGJOE JG̏৯ͷ৯ࣄهશͯೖྗࡁ \ΞυόΠεදࣔղې ^ΞυόΠε3FQPTJUPSZVQEBUF ΞυόΠε
ͦΕҎ֎DomainRepositoryUseCaseίʔυίʔυ
ͳͥυϝΠϯ ( खଓ͖ ) ͱ DB ʹண͔ͨ͠
ͦΕҎ֎DomainίʔυίʔυɾϏδωεͷͨΊͷίʔυɾυϝΠϯΛ࿈ܞͤ͞ΔͨΊͷίʔυɾHTTP ϦΫΤετͷͨΊͷίʔυɾσʔλϕʔεಡΈॻ͖ͷͨΊͷίʔυมߋ͞ΕΔൣғͱཧ༝͕ҧ͏͔Βɹɾ༗ྉձһઐ༻ͷίʔε૿͍ͨ͠
ͦΕҎ֎DomainίʔυίʔυɾϏδωεͷͨΊͷίʔυɾυϝΠϯΛ࿈ܞͤ͞ΔͨΊͷίʔυɾHTTP ϦΫΤετͷͨΊͷίʔυɾσʔλϕʔεಡΈॻ͖ͷͨΊͷίʔυมߋ͞ΕΔൣғͱཧ༝͕ҧ͏͔ΒɹɾੑೳϠό͘ͳ͖͔ͬͯͨΒඇਖ਼نԽ͢Δ
͏Ұ
ͦΕҎ֎DomainRepositoryUseCaseίʔυίʔυϏδωεͷͨΊͷίʔυυϝΠϯΛ͏ίʔυσʔλϕʔεͷͨΊͷίʔυ·ͩࠞͬͯ͡ΔΑͶ
खଓ͖ͱ DB ࠜຊ͔Β͚Α͏
खଓ͖Λͱ͢ΔύοέʔδΛ Application ͱ͢Δ
σʔλϕʔεΛͱ͢ΔύοέʔδΛ Infrastructure ͱ͢Δ
ͦΕҎ֎ApplicationDomainRepositoryUseCaseίʔυInterfaceClassίʔυInfrastructureRepositoryImpl
ApplicationDomainRepositoryUseCaseInterfaceClassίʔυInfrastructureRepositoryImplɾORM Λ import ͨ͠ΓɾڥมͰڍಈΛม͑ͨΓɾϏδωεϧʔϧͷྲྀΕΛΔ࣌ʹݟΔɾԿΛಡΈॻ͖͢Δ͔खଓ͖ͷҰ
ͱ͜ΖͰ Repository ͕ѻ͏ͷԿ͔
Repository ू͚ͩѻ͏※ ूϥΠϑαΠΫϧΛ࣋ͭ ( = ߋ৽͞Ε͍ͯ͘ ) ΦϒδΣΫτΛߋ৽͕࿈ಈ͢ΔൣғͰෆ߹͕ͳ͍Α͏ʹͱΓ·ͱΊͨͷ
͠ Repository ͕ूͰͳͨͩ͘ͷΦϒδΣΫτΛѻ͏ͱ
GVO͋Δखଓ͖\ே৯৯ࣄ3FQPTJUPSZGJOE̍৯ ன৯৯ࣄ3FQPTJUPSZGJOE̍৯ ༦৯৯ࣄ3FQPTJUPSZGJOE̍৯ ̏৯ͷ৯ࣄهOFX̏৯ͷ৯ࣄه ே৯ ன৯ ༦৯ ே৯ӫཆૉன৯ӫཆૉ༦৯ӫཆૉ^͜ΕΦϒδΣΫτ͜Ε͕ू
GVO͋Δखଓ͖\ே৯৯ࣄ3FQPTJUPSZGJOE̍৯ ன৯৯ࣄ3FQPTJUPSZGJOE̍৯ ༦৯৯ࣄ3FQPTJUPSZGJOE̍৯ ̏৯ͷ৯ࣄهOFX̏৯ͷ৯ࣄه ே৯ ன৯ ༦৯ ே৯ӫཆૉன৯ӫཆૉ༦৯ӫཆૉ^ूΛΈཱͯΔ࣮Λखଓ͖ଆʹॻ͔ͳ͚Ε͍͚ͳ͍͜Εຖճॻ͘ͷ͠ΜͲ͍ΑͶίϯετϥΫλมΘͬͨΒԿϲॴมߋ͢Δ͜ͱʹͳΔΒ...
GVO͋Δखଓ͖\̏৯ͷ৯ࣄهன৯BEE ΞΠε৯ࣄ3FQPTJUPSZVQEBUF ̏৯ͷ৯ࣄهன৯^ΦϒδΣΫτ͚ͩอଘ
GVO͋Δखଓ͖\̏৯ͷ৯ࣄهன৯BEE ΞΠε৯ࣄ3FQPTJUPSZVQEBUF ̏৯ͷ৯ࣄهன৯^ன৯͚ͩߋ৽͍ͯ͠Δ͚Ͳɺ߹ܭӫཆૉมΘͬͯΔ͔Βอଘ͠ͳ͍ͱ͍͚ͳ͍Α
ूͷߏΛ UseCase ʹ࿙Β͢ͱʮϧʔϧͷपపఈ͍ͨΜʯʮूΛมߋͮ͠Β͍ʯͱͳΔ→ ։ൃ͕Լ͢Δ
Repository ू͚ͩѻ͏
GVO͋Δखଓ͖\̏৯ͷ৯ࣄه3FQPTJUPSZGJOE ^GVO͋Δखଓ͖\̏৯ͷ৯ࣄهBEEன৯ ΞΠε৯ࣄ3FQPTJUPSZVQEBUF ̏৯ͷ৯ࣄه^ूΛऔಘूΛมߋूΛอଘ
ͦΕҎ֎ApplicationDomainίʔυInterfaceClassInfrastructureUseCaseRepositoryImplRepositoryίʔυू
ͱ͜ΖͰɺूͬͯੜ͕ͱͯେม
ɾجຊతʹେ͖͍ɾ͍ΖΜͳΦϒδΣΫτΛ͏ɾมϚοϐϯά͕͋Δɾෆ߹νΣοΫͷϧʔϧ͕͋Δ
ͦΕҎ֎ApplicationDomainίʔυInfrastructureRepositoryUseCaseRepositoryImplूίʔυɹ͜͜ʹ new ूΛɹॻ͘͜ͱʹͳͬͯ͠·͏
ͦΕҎ֎ApplicationDomainίʔυInfrastructureRepositoryUseCaseRepositoryImplूίʔυɹ͘Γ͔͑͠ॻ͖ͨ͘ͳ͍͠ɺɹͦͦυϝΠϯϧʔϧͩ͠ɺɹnew ͬͪ͜ʹॻ͍ͨΑͶ
ूͷੜDomain ύοέʔδͷFactory Ͱߦ͏
ͦΕҎ֎ApplicationDomainίʔυInfrastructureRepositoryUseCaseRepositoryImplूίʔυFactory
ApplicationDomainInfrastructureRepositoryUseCaseRepositoryImplूίʔυFactoryखଓ͖ σʔλϕʔε;Δ·͍ੜɾ߹ੑϧʔϧ
Repository ͷಡΈͱॻ͖Λ͚Δ
ॻ͘୯ҐͱಡΉ୯Ґҧ͏
ॻ͘ͱ͖ ( ू )৯ࣄه ৯ࣄه৯ࣄهɾछผ: ே৯ɾ࣌ؒ: 08:30ɾ৯ࣄ: ೲ౾ɺ͝൧ɾӫཆૉ: λϯύΫ࣭... ࢷ࣭...ɾࣸਅ:ɾछผ: ன৯ɾ࣌ؒ: 12:34ɾ৯ࣄ: ࢠကɺຯḩोɾӫཆૉ: λϯύΫ࣭... ࢷ࣭...ɾࣸਅ: image.jpgɾछผ: ༦৯ɾ࣌ؒ: 19:51ɾ৯ࣄ: ϋϯόʔάɺαϥμɾӫཆૉ: λϯύΫ࣭... ࢷ࣭...ɾࣸਅ: image.jpgಡΉͱ͖ ( ूͰͳ͍͜ͱ͕͋Δ )̏৯ͷ৯ࣄ࣌ؒɾே৯ͷ࣌ؒ: 08:30ɾன৯ͷ࣌ؒ: 12:34ɾ༦৯ͷ࣌ؒ: 19:51
͠ Repository ʹಡΈॻ͖྆ํͷϝιουΛ࡞Δͱ
Α͘Θ͔Βͳ͍ϝιου͕૿͑Δ৯ࣄهϦϙδτϦ\GVOGJOE#Z*E *EूGVOJOTFSU ूGVOVQEBUF ूGVOGJOE#Z6TFS*E 6TFS*EूˡूѻͬͯΔ͔ΒΪϦηʔϑ GVOFYJTUT *E#PPMˡ͜Εηʔϑ GVOHFU৯ࣄ࣌ؒϦετ *E-JTU5JNFˡू GVOHFUன৯ *E৯ࣄˡूͷҰ෦Ͱ͔͠ͳ͍͚Ͳ GVOVQEBUF৯ࣄ࣌ؒ *E 5JNFˡूΘͳ͍ͷ ^ϥΠϑαΠΫϧΛѻ͏ͷ͕ूͰɺRepository ͷूͷอଘͱ෮ݩͷ͚ͣͩͲ... ͍ͭ͜Β...??
ͳΜͰ SQL ॻ͍͍͍ͯͱ͜Ζʹͳͬͯ͠·͏
ूΛ௨ͣ͞ঢ়ଶΛѻ͍ͬͯΔͱʮ݁ہΫΤϦಡ·ͳ͍ͱΘ͔ΒΜʯͱͳΔ→ ։ൃ͕Լ͢Δ
Ͱ Repository ʹूΛಡΈॻ͖͢Δϝιου͔͠࡞Βͳ͍ͱ
ੑೳతʹແବ͕ଟ͍̍લSFQPTJUPSZGJOE#Z*E ̎લSFQPTJUPSZGJOE#Z*E ̏લSFQPTJUPSZGJOE#Z*E ̏ؒͷ৯ࣄ࣌ؒϦετ<̍લ࣌ؒ ̎લ࣌ؒ ̏લ࣌ؒ>ɹू͕̏ͭඞཁͩͱɹ̏ճͷ DB ΞΫηε͕ඞཁɹ৯ࣄӫཆૉͷใΛ join ͯ͠ɹ෮ݩͨ͠ͷʹɺ͔࣌ؒͬͯ͠ͳ͍
ಡΉॲཧඞཁ͚ͩͲRepository ʹॻ͘ͷͬ͘͠Γ͜ͳ͍
ूͷอଘͱ෮ݩ Repository ͱ͠ɺ΄͔ͷॊೈͳࢀর QueryService ͱ͢Δ
ͦΕҎ֎ApplicationDomainίʔυInterfaceClassInfrastructureQueryService QueryServiceImplRepositoryUseCaseRepositoryImplूίʔυFactory
৯ࣄه3FQPTJUPSZ\GVOGJOE#Z*E *EूGVOJOTFSU ूGVOVQEBUF ू^৯ࣄه2VFSZ4FSWJDF\GVOFYJTUT *E#PPMGVOHFU৯ࣄ࣌ؒϦετ *E-JTU5JNF^ूʹूத͢ΔɹूΛΘͳ͍͜ͱ͋Δɹͨͩ͠ ಡΈ ͚ͩ
ͬͨ෦֎քͱͷ૭ޱ
ͦΕҎ֎ApplicationDomainίʔυInterfaceClassInfrastructureɹೖྗͷܻνΣοΫɹϨεϙϯε Json ͷ࡞ɹUseCase ͷ࣮ߦQueryService QueryServiceImplRepositoryUseCaseRepositoryImplूίʔυFactory
ɹϨεϙϯε Json ͷ࡞UseCase ͷ࣮ߦ API ݻ༗ͷ߹
ମॏΛ 10.0 ~ 200.0 ͷখͰѻ͏ͷγεςϜڞ௨ϧʔϧ
͠શͯͷ API ͰମॏͷόϦσʔγϣϯΛݸผ࣮͍ͯ͠Δͱ
API 1 ମॏνΣοΫ 1API 2 ମॏνΣοΫ 2API 3 ମॏνΣοΫ 3API 4 ମॏνΣοΫ 4ॏෳίʔυͷϝϯςҊ֎େม্ݶΛ 210.0 ʹ͍ͨ͑ͬ͠
"ಉ͡" ΛΈͰͳ͓͘࡞๏Ͱ࣮ݱ͢ΔͱʮมߋͭΒ͍ɺ֬ೝ͍ͨΜʯͱͳΔ→ ։ൃ͕Լ͢Δ
ݻ༗ͷ߹ Controller ͱ͠ɺڞ௨ͷϧʔϧ Request ͱͯ͠ɺ͚ͯอक͠Α͏
PresentationApplication InfrastructureDomainRequestControllerInterfaceClassɹUseCase ͷ࣮ߦɹϨεϙϯε Json ͷ࡞ɹೖྗͷܻνΣοΫQueryService QueryServiceImplRepositoryUseCaseRepositoryImplूίʔυFactory
࠷ޙʹूʹॻ͖ͮΒ͍υϝΠϯϩδοΫʹ͍ͭͯ
৯ࣄهͲͪΒͷूʹॻ͔͘...Χϥμه৯ࣄهͱΧϥμه͔Βɺ݈߁ಘΛࢉग़͢Δ৯ࣄهಘܭࢉ ΧϥμهΧϥμهಘܭࢉ ৯ࣄه
ͲͪΒ͔ͷूʹ࣮͢Δͱ
৯ࣄهมͳґଘ͕ൃੜ͢ΔΧϥμهͱͱؔͷͳ͍ 2 ͭͷूʹґଘ͕ൃੜ͢Δ
৯ࣄه֦ு͠ʹ͘͘ͳΔΧϥμهඞཁͳू͕૿͑ͨ࣌ʹΑΓࠔΔӡಈهʁʁ
ෆඞཁͳूͷґଘΛൃੜͤ͞Δͱʮूͷมߋ͕ผͷूʹӨڹ͢Δ͔Βม͑ʹ͍͘ʯʮूͷؔΛΒͳ͍ͱॲཧΛݟ͚ͭΒΕͳ͍ʯͱͳΔ→ ։ൃ͕Լ͢Δ
ूʹ͓͞·Βͳ͍υϝΠϯॲཧDomainService ʹ࣮͢Δ
৯ࣄهΧϥμهυϝΠϯαʔϏευϝΠϯαʔϏεಘܭࢉ ৯ࣄه Χϥμه
৯ࣄهΧϥμهυϝΠϯαʔϏεूಠཱ͍ͯ͠ΔυϝΠϯαʔϏεHFU݈߁ಘ ৯ࣄه Χϥμه
৯ࣄهӡಈهυϝΠϯαʔϏεHFU݈߁ಘ ৯ࣄه Χϥμه ӡಈهυϝΠϯαʔϏε Χϥμه֦ு͍͢͠
PresentationApplication InfrastructureDomainRequestControllerFactoryDomainServiceूInterfaceClassQueryService QueryServiceImplRepositoryUseCaseRepositoryImpl
తՌͨͤͦ͏͔
Կͱ࿈ಈ͍ͯ͠Δ͔
PresentationInfrastructureApplicationDomain
PresentationInfrastructureApplicationDomain֓೦Ϟσϧਤ৽ίʔε࡞Γ͍ͨϢʔεέʔεΫϥεਤϢʔεέʔεهड़Ϗδωεؔͷίʔυ...
PresentationInfrastructureApplicationDomainDB ༷ॻςʔϒϧߏม͍͑ͨ DB ؔͷίʔυ...
PresentationInfrastructureApplicationDomainAPI ༷ॻΞϓϦͷදࣔม͍͑ͨ ֎քؔͷίʔυ...
͘։ൃͰ͖Δ͔
PresentationApplication InfrastructureDomainQueryService QueryServiceImplRepositoryUseCaseRequestControllerRepositoryImplFactoryDomainServiceूಘܭࢉϧʔϧ͕มΘͬͨσʔλߏॲཧϑϩʔมΘΒͳ͍ͳΒରԠ͚ͩ͜͜Ͱେৎࣗಈςετʹ DB ͍Βͳ͍
PresentationApplication InfrastructureDomainQueryService QueryServiceImplRepositoryUseCaseRequestControllerRepositoryImplFactoryDomainServiceूςʔϒϧఆٛม͑ͨInfrastructure ͷࣗಈςετ͕௨ͤΕେৎApplication ͷ Interface ͕มߋͳ͠ͳΒଞʹӨڹͳ͠
PresentationApplication InfrastructureDomainQueryService QueryServiceImplRepositoryUseCaseRequestControllerRepositoryImplFactoryDomainServiceूϑϩʔͳΒ Application Λ֬ೝUseCase ͷࣗಈςετΛ͚ͨ͠Ε Infrastructure ϞοΫͰे༗ྉձһͷϑϩʔΛม͍͑ͨ
PresentationApplication InfrastructureDomainQueryService QueryServiceImplRepositoryUseCaseRequestControllerRepositoryImplFactoryDomainServiceूࢀর࣌ʹฦͯ͠ࢀরใ QueryService Λத৺ʹରԠ͢Ε OK
มߋͷछྨʹԠͯ͡ʮ୭ͱԿΛݟ͔ͯ͢ʯʮͲ͜Λมߋ͢Δඞཁ͕͋Δ͔ʯ͕໌֬ʹͳΔ
υϝΠϯࣝΛڞ༗ͯ͠υϝΠϯΫϥεΛߋ৽͠ଓ͚ΒΕΔ
υϝΠϯʹ͍ͭͯߟ͑Δ͕࣌ؒ૿ͤΔ
ϦΞʔΩςΫνϟʹΑͬͯ͜͏ͳΓ͍ͨ
͜͏͍͏෩ʹߟ͑ͳ͕ΒҰॹʹ։ൃͤͯ͞Β͍ͬͯ·͢