$30 off During Our Annual Pro Sale. View Details »

リアーキテクチャによってどうなりたいか/re-architecture

suzuki-hoge
September 14, 2023

 リアーキテクチャによってどうなりたいか/re-architecture

リアーキテクチャによってどうなりたいか

2023/09/14

asken withミライトデザインのDDDのはじめ方 DDD x RDRA x ICONIX
https://asken.connpass.com/event/293085/

suzuki-hoge

September 14, 2023
Tweet

Other Decks in Programming

Transcript

  1. ϦΞʔΩςΫνϟʹΑͬͯ


    Ͳ͏ͳΓ͍͔ͨ
    ԿΛ෼͚ͯɺԿΛڞ༗͢Δ͔
    2023/09/14


    ϛϥΠτσβΠϯɹ΄͛͞Μ

    View Slide

  2. ؆୯ʹࣗݾ঺հ

    View Slide

  3. suzuki-hoge ( ΄͛͞Μ )


    όοΫΤϯυ։ൃ 12 ೥͘Β͍

    View Slide

  4. Zenn Ͱ Book Λॻ͍ͨΓ

    View Slide

  5. YouTube Ͱมͳ͜ͱ΍ͬͨΓ

    View Slide

  6. ࠷ۙͪΐͬͱӫཆΛؾʹͯ͠·͢

    View Slide

  7. ϨΠϠʔɾύοέʔδɾΫϥε


    ͷ෼͚ํ

    View Slide

  8. ࣗ෼ͷϓϩδΣΫτͷ


    ߏ੒Λઆ໌Ͱ͖·͔͢ʁ

    View Slide

  9. ͜Ε͸ DB ಡΈॻ͖


    ͢Δͱ͖ʹॻ͘΍ͭ
    ͜Ε͸ݖݶνΣοΫ


    ͢Δͱ͖ʹॻ͘΍ͭ

    View Slide

  10. Ͳ͏ͯͦ͠͏ͳ͍ͬͯΔ͔


    આ໌Ͱ͖·͔͢ʁ

    View Slide

  11. ࠓճͷϦΞʔΩςΫνϟͷ


    ݕূϑΣʔζͰௐ੔தͷߏ੒

    View Slide

  12. Presentation
    Application Infrastructure
    Domain
    QueryService QueryServiceImpl
    Repository
    UseCase
    Request
    Controller
    RepositoryImpl
    Factory
    DomainService
    ू໿
    Interface
    Class

    View Slide

  13. ίʔυ
    ڊେͳ͔ͨ·ΓΛॱΛ௥ͬͯ෼ղͯ͠ɺ


    Ͳ͏͖ͯ͠͞΄ͲͷਤʹͳΔ͔͓࿩͠·͢

    View Slide

  14. ෼͚Δͱڞ༗͢Δʹ


    ஫໨ͯ͠ߟ͑Δ

    View Slide

  15. ͓அΓ

    View Slide

  16. Repository ΍ ू໿ ͳͲͷ୯ޠ͸


    ฉ͍ͨ͜ͱ͸͋Δͱ͍͏લఏͰਐΊ·͢

    View Slide

  17. Ұ෦ύοέʔδ͸࣌ؒͷ౎߹ͰৄࡉΛׂѪ͠·͢


    ޙ೔ϊʔΧοτεϥΠυΛΞοϓ༧ఆͰ͢ͷͰɺ


    Α͚Ε͹ͦͪΒΛ͝ཡ͍ͩ͘͞

    View Slide

  18. ෼͚Δ

    View Slide




  19. ͋ΔֶߍͷੜెΛ෼͚͍ͨ

    View Slide

  20. A ͞Μ B ͞Μ C ͞Μ D ͞Μ
    Ͳ͏΍ͬͯ෼͚Δ͔

    View Slide

  21. A ͞Μ B ͞Μ C ͞Μ D ͞Μ
    ਐ࿏૬ஊΛ͢Δ͔Β


    ઐ߈ผʹ෼͚Δ
    จܥ ཧܥ

    View Slide

  22. A ͞Μ B ͞Μ C ͞Μ D ͞Μ
    ෦׆ಈର߅ϦϨʔΛ͢Δ͔Β


    ෦׆ผʹ෼͚Δ
    ໺ٿ෦ όεέ෦ ςχε෦

    View Slide

  23. ෼͚Δͱ͖͸໨త͕͋Δ

    View Slide

  24. Ͱ͸ίʔυΛ෼͚Δ໨త͸

    View Slide

  25. 1. ϏδωεͱίʔυΛ࿈ಈ͍͔ͤͨ͞Β


    2. ଎͘։ൃͰ͖ΔΑ͏ʹ͍͔ͨ͠Β

    View Slide

  26. 1. ϏδωεͱίʔυΛ
    ࿈ಈ͍ͤͨ͞

    View Slide

  27. Ͳ͏ͯ͠࿈ಈ͍͔ͤͨ͞
    γεςϜ
    ར༻ऀ
    asken ༷ͷαʔϏε

    View Slide

  28. γεςϜ͸ϏδωεͷͨΊʹ͋Δ
    γεςϜ
    ར༻ऀ
    asken ༷ͷαʔϏε
    ͻͱͼͱͷ໌೔Λ


    ࠓ೔ΑΓ݈߁ʹ͢Δ
    ϏδωεαΠυ
    اըɾӡӦɾӦۀɾ෼ੳ

    View Slide

  29. ϏδωεΛແࢹͨ͠։ൃ͸Ͱ͖ͳ͍
    γεςϜ
    ར༻ऀ
    ϏδωεαΠυ ։ൃऀ
    asken ༷ͷαʔϏε
    اըɾӡӦɾӦۀɾ෼ੳ ։ൃ

    View Slide

  30. ίʔυ͸ڞ༗Ͱ͖ͳ͍͔ΒυϝΠϯ஌ࣝͱͯ͠ڞ༗͢Δ
    γεςϜ
    ར༻ऀ
    asken ༷ͷαʔϏε
    ϏδωεαΠυ ։ൃऀ
    υϝΠϯ஌ࣝ

    View Slide

  31. Ͱ͸Ϗδωεͷίʔυͱ͸

    View Slide

  32. ಉ͜͡ͱΛ࣮ݱ͢Δ 2 ͭͷίʔυ
    ৯ࣄه࿥഑ྻ<
    औಘ
    औಘ
    औಘ

    >
    GPS৯ࣄه࿥JO৯ࣄه࿥഑ྻ\
    JG৯ࣄه࿥৯ࣄJTOVMM\
    CSFBL
    ^
    ^
    ࠓ೔ͷΞυόΠεεςʔλε
    อଘ ࠓ೔ͷΞυόΠε

    ̏৯෼ͷ৯ࣄه࿥औಘ

    JG̏৯෼ͷ৯ࣄه࿥શͯೖྗࡁ
    \
    ࠓ೔ͷΞυόΠεදࣔղې

    ^
    อଘ ࠓ೔ͷΞυόΠε

    View Slide

  33. ίʔυΛඇΤϯδχΞʹઆ໌ͯ͠ΈΔ
    શͯͷ৯ࣄه࿥ͷɺ͋ɺேன൩͕
    ͳΜͰ͚͢ͲɺͦΕͷશ෦ͷ৯
    ࣄ͕࣌ؒOVMM͡Ό͋ͳ͚Ε͹ɺͭ
    ·Γ৯ࣄΛه࿥͍ͯ͠ΔͬͯΈͳͤ
    Ε͹ɺΞυόΠεͷදࣔεςʔλε
    ʹΛ୅ೖͯ͠อଘ͠·͢
    ̏৯෼ͷ৯ࣄه࿥Λऔಘ͠ɺͦΕ͕
    શͯೖྗࡁͳΒɺΞυόΠεΛදࣔ
    ղېͱͯ͠อଘ͠·͢

    View Slide

  34. զʑ։ൃऀ͕΍Δ͜ͱ
    ৚݅ʹԠͯ͡ΞυόΠεͷදࣔΛղې͢Δ͜ͱͰ͋ͬͯ


    அͯ͡ 2 Λ୅ೖ͢Δ͜ͱͰ͸ͳ͍

    View Slide

  35. આ໌͠ͳ͔ͬͨ͜ͱɾઆ໌ͨ͜͠ͱ
    ɾσʔλߏ଄
    ɹɾேன༦ͷࣝผํ๏
    ɹɾԿΛ࣋ͬͯೖྗࡁΈͱ͢Δ͔
    ɹɾද੍ࣔޚΛͲ͏࣮ݱ͍ͯ͠Δ͔
    ɾॲཧͷৄࡉϑϩʔ
    ɹɾGPSจ΍CSFBLจ
    ɾ̏৯෼ͷ৯ࣄه࿥͕ඞཁͰ͋Δ
    ɾશͯೖྗࡁΈͰͳ͍ͱ͍͚ͳ͍
    ɾΞυόΠεͷද͕ࣔղې͞ΕΔ
    γεςϜͷͨΊͷίʔυ ϏδωεͷͨΊͷίʔυ
    ͕͜͜υϝΠϯͷίʔυ

    View Slide

  36. ϏδωεͷίʔυΛ


    Domain ύοέʔδʹ


    ·ͱΊ͓ͯ͘ͱڞ༗͠΍͍͢

    View Slide

  37. ύοέʔδਤʹ൓ө

    View Slide

  38. ͦΕҎ֎
    Domain
    ίʔυ
    ίʔυ
    ɾϏδωεͷͨΊͷίʔυ
    ɾυϝΠϯΛ࿈ܞͤ͞ΔͨΊͷίʔυ


    ɾHTTP ϦΫΤετͷͨΊͷίʔυ


    ɾσʔλϕʔεಡΈॻ͖ͷͨΊͷίʔυ

    View Slide

  39. 2. ଎͘։ൃͰ͖Δ


    Α͏ʹ͍ͨ͠

    View Slide

  40. Ϗδωεͷίʔυ͚ͩ


    ෼཭͓͚ͯ͠͹͍͍ͷ͔

    View Slide

  41. ΋͠େ͖ͳίʔυϒϩοΫʹ


    ͍Ζ͍Ζͳίʔυ͕͍ࠞͬͯͨ͡Β

    View Slide

  42. ͋Δཧ༝Ͱมߋ͢Δͱ͜Ζ
    ࠓճ͸มߋ͠ͳ͍ͱ͜Ζ

    View Slide

  43. ৺഑͔ͩΒςετ͢Δͱ͜Ζ

    View Slide

  44. ৺഑͔ͩΒςετ͢Δͱ͜Ζ
    ͍΍ʔཧ۶Ͱ͸େৎ෉ͳΜͰ͚͢Ͳɺ


    Կ͕ى͖Δ͔Θ͔Βͳ͍ͷͰͪΐͬͱ...


    ࡉ͔͘ௐ΂ͯΈͳ͍ͱͳΜͱ΋...

    View Slide

  45. ͋Δཧ༝Ͱมߋͨ͠ͱ͜Ζ...??
    ࠓճ͸มߋ͠ͳ͔ͬͨͱ͜Ζ...??
    ৺഑͔ͩΒςετ͢Δͱ͜Ζ

    View Slide

  46. ؔ܎ͳ͍͸ͣͷίʔυ·Ͱ


    ௐ΂ͨΓςετͨ͠Γ͢Δ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  47. มߋͷཧ༝͕ҧ͏ͱมߋ͕ಉ࣌ൃੜ͢Δ


    Մೳੑ΋্͕Γɺௐ੔΍Ϛʔδ͕ෳࡶԽ͢Δ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  48. ςετ͢Δͱ͜Ζ
    ͋Δཧ༝Ͱมߋ͢Δͱ͜Ζ
    ࠓճ͸มߋ͠ͳ͍ͱ͜Ζ
    ͕͢͞ʹେৎ෉Ͱ͠ΐ

    View Slide

  49. υϝΠϯΫϥεͷߏ଄ͱ


    DB ͷσʔλߏ଄Λ෼͚Δ

    View Slide

  50. εςʔλε ( Int )
    status
    1
    2
    3
    1 // ਃࠐத


    2 // ར༻த


    3 // ୀձࡁ
    // ར༻தͷ৔߹


    if user.status == 2 { ... }

    View Slide

  51. εςʔλε ୀձਃࠐ೔
    1
    2
    2 2023/09/08
    3 2023/09/01
    ୀձॲཧத͸ه࿥͸͚͍͍͚ͭͯͲίʔεมߋ͸Ͱ͖ͳ͍ͨ͘͠
    ୀձॲཧத... 2 ͷ͏ͪୀձਃࠐ೔͕ຒ·ͬͯΔਓͬͯ͜ͱ͔...

    View Slide

  52. εςʔλε ( Int )
    1 // ਃࠐத


    2 // ར༻த


    3 // ୀձࡁ
    // ར༻தͷ৔߹


    if user.status == 2 && user.date != null { ... }
    εςʔλε ୀձਃࠐ೔
    1
    2
    2 2023/09/08
    3 2023/09/01

    View Slide

  53. εςʔλε ( Int )
    1 // ਃࠐத


    2 // ར༻த


    3 // ୀձࡁ
    // ར༻தͷ৔߹


    if user.status == 2 && user.date != null { ... }
    εςʔλε ୀձਃࠐ೔
    1
    2
    2 2023/09/08
    3 2023/09/01
    ͏ͦ͡ΌΜʂ

    View Slide

  54. ྫ͑͹ΤσΟλͰΫϥεͷߏ଄Λ


    ϦϑΝΫλϦϯάͨ͠ͱ͖ʹɺ


    DB ϚΠάϨʔγϣϯ͸·ͣ͠ͳ͍
    υϝΠϯͷߏ଄ͱ DB ͷσʔλߏ଄͸ઈରʹ࿈ಈ͠ͳ͍

    View Slide

  55. ͣΕ͍ͯ͘΋ͷΛ෼͚͍ͯͳ͍ͱࣄނ͕ى͖Δ


    ฉ͍ͯͨ࿩ͱಡΜͩίʔυ͕ҧ͏ͷͰށ࿭͏


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  56. εςʔλε ( Enum )
    ਃࠐத


    ར༻த


    ୀձॲཧத


    ୀձࡁ
    // ར༻தͷ৔߹


    if user.status.ར༻த { ... }
    εςʔλε ୀձਃࠐ೔
    1
    2
    2 2023/09/08
    3 2023/09/01

    View Slide

  57. ύοέʔδਤΛ֬ೝ

    View Slide

  58. ͦΕҎ֎
    Domain
    ίʔυ
    ίʔυ
    DB ͷߏ଄ͱ͸੾Γ཭͓ͯ͘͠

    View Slide

  59. υϝΠϯΫϥεΛ࡞ͬͨΒ


    खଓ͖ͱ DB ૢ࡞Λ෼͚Δ

    View Slide

  60. υϝΠϯΫϥεΛ࢖͏


    खଓ͖ͷίʔυ͸ઈରʹඞཁ

    View Slide

  61. ΋͜͠ͷखଓ͖ͷίʔυʹ


    σʔλϕʔεͷॲཧ͕͍ࠞͬͯͨ͡Β

    View Slide

  62. 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

    View Slide

  63. 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

    ɹυϝΠϯΛ࢖͏ͨΊͷίʔυͳͷʹ


    ɹυϝΠϯ࢖ͬͯΔͷ͚ͩ͜͜

    View Slide

  64. ൥ࡶ

    View Slide

  65. ύοͱݟͯυϝΠϯ͕ຒ΋Ε͍ͯΔͱ


    ʮ͜ͷ API ͳΜ͚ͩͬʯͱͳΔ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  66. υϝΠϯΛ࢖͏खଓ͖ͷ෦෼Λ UseCase ͱ͠ɺ


    ϞσϧΛಡΈॻ͖͢Δ෦෼Λ Repository ͱ͢Δ

    View Slide

  67. ̏৯෼ͷ৯ࣄه࿥৯ࣄ3FQPTJUPSZGJOE

    ΞυόΠεΞυόΠε3FQPTJUPSZGJOE

    JG̏৯෼ͷ৯ࣄه࿥શͯೖྗࡁ
    \
    ΞυόΠεදࣔղې

    ^
    ΞυόΠε3FQPTJUPSZVQEBUF ΞυόΠε

    View Slide

  68. ύοέʔδਤʹ൓ө

    View Slide

  69. ͦΕҎ֎
    Domain
    Repository
    UseCase
    ίʔυ
    ίʔυ

    View Slide

  70. ͳͥυϝΠϯ ( खଓ͖ ) ͱ DB ʹண໨͔ͨ͠

    View Slide

  71. ͦΕҎ֎
    Domain
    ίʔυ
    ίʔυ
    ɾϏδωεͷͨΊͷίʔυ
    ɾυϝΠϯΛ࿈ܞͤ͞ΔͨΊͷίʔυ


    ɾHTTP ϦΫΤετͷͨΊͷίʔυ


    ɾσʔλϕʔεಡΈॻ͖ͷͨΊͷίʔυ
    มߋ͞ΕΔൣғͱཧ༝͕ҧ͏͔Β
    ɹɾ༗ྉձһઐ༻ͷίʔε૿΍͍ͨ͠

    View Slide

  72. ͦΕҎ֎
    Domain
    ίʔυ
    ίʔυ
    ɾϏδωεͷͨΊͷίʔυ
    ɾυϝΠϯΛ࿈ܞͤ͞ΔͨΊͷίʔυ


    ɾHTTP ϦΫΤετͷͨΊͷίʔυ


    ɾσʔλϕʔεಡΈॻ͖ͷͨΊͷίʔυ
    มߋ͞ΕΔൣғͱཧ༝͕ҧ͏͔Β
    ɹɾੑೳϠό͘ͳ͖͔ͬͯͨΒඇਖ਼نԽ͢Δ

    View Slide

  73. ΋͏Ұ੠

    View Slide

  74. ͦΕҎ֎
    Domain
    Repository
    UseCase
    ίʔυ
    ίʔυ
    ϏδωεͷͨΊͷίʔυ
    υϝΠϯΛ࢖͏ίʔυ
    σʔλϕʔεͷͨΊͷίʔυ
    ·ͩࠞͬͯ͡ΔΑͶ

    View Slide

  75. खଓ͖ͱ DB ͸


    ࠜຊ͔Β෼͚Α͏

    View Slide

  76. खଓ͖Λ੹຿ͱ͢Δ


    ύοέʔδΛ Application ͱ͢Δ

    View Slide

  77. σʔλϕʔεΛ੹຿ͱ͢Δ


    ύοέʔδΛ Infrastructure ͱ͢Δ

    View Slide

  78. ύοέʔδਤʹ൓ө

    View Slide

  79. ͦΕҎ֎
    Application
    Domain
    Repository
    UseCase
    ίʔυ
    Interface
    Class
    ίʔυ
    Infrastructure
    RepositoryImpl

    View Slide

  80. Application
    Domain
    Repository
    UseCase
    Interface
    Class
    ίʔυ
    Infrastructure
    RepositoryImpl
    ɾORM Λ import ͨ͠Γ


    ɾ؀ڥม਺ͰڍಈΛม͑ͨΓ
    ɾϏδωεϧʔϧͷྲྀΕΛ஌Δ࣌ʹݟΔ


    ɾԿΛಡΈॻ͖͢Δ͔͸खଓ͖ͷҰ؀

    View Slide

  81. ͱ͜ΖͰ Repository ͕ѻ͏ͷ͸Կ͔

    View Slide

  82. Repository ͸ू໿͚ͩѻ͏
    ※ ू໿


    ϥΠϑαΠΫϧΛ࣋ͭ ( = ߋ৽͞Ε͍ͯ͘ ) ΦϒδΣΫτΛ


    ߋ৽͕࿈ಈ͢ΔൣғͰෆ੔߹͕ͳ͍Α͏ʹͱΓ·ͱΊͨ΋ͷ

    View Slide

  83. ΋͠ Repository ͕ू໿Ͱ͸


    ͳͨͩ͘ͷΦϒδΣΫτΛѻ͏ͱ

    View Slide

  84. GVO͋Δखଓ͖\
    ே৯৯ࣄ3FQPTJUPSZGJOE̍৯෼

    ன৯৯ࣄ3FQPTJUPSZGJOE̍৯෼

    ༦৯৯ࣄ3FQPTJUPSZGJOE̍৯෼

    ̏৯෼ͷ৯ࣄه࿥OFX̏৯෼ͷ৯ࣄه࿥
    ே৯
    ன৯
    ༦৯
    ே৯ӫཆૉன৯ӫཆૉ༦৯ӫཆૉ


    ^
    ͜Ε͸ΦϒδΣΫτ
    ͜Ε͕ू໿

    View Slide

  85. GVO͋Δखଓ͖\
    ே৯৯ࣄ3FQPTJUPSZGJOE̍৯෼

    ன৯৯ࣄ3FQPTJUPSZGJOE̍৯෼

    ༦৯৯ࣄ3FQPTJUPSZGJOE̍৯෼

    ̏৯෼ͷ৯ࣄه࿥OFX̏৯෼ͷ৯ࣄه࿥
    ே৯
    ன৯
    ༦৯
    ே৯ӫཆૉன৯ӫཆૉ༦৯ӫཆૉ


    ^
    ू໿Λ૊ΈཱͯΔ࣮૷Λखଓ͖ଆʹॻ͔ͳ͚Ε͹͍͚ͳ͍
    ͜Εຖճॻ͘ͷ͠ΜͲ͍ΑͶ


    ίϯετϥΫλมΘͬͨΒԿϲॴมߋ͢Δ͜ͱʹͳΔ΍Β...

    View Slide

  86. GVO͋Δखଓ͖\
    ̏৯෼ͷ৯ࣄه࿥ன৯BEE ΞΠε

    ৯ࣄ3FQPTJUPSZVQEBUF ̏৯෼ͷ৯ࣄه࿥ன৯

    ^
    ΦϒδΣΫτ͚ͩอଘ

    View Slide

  87. GVO͋Δखଓ͖\
    ̏৯෼ͷ৯ࣄه࿥ன৯BEE ΞΠε

    ৯ࣄ3FQPTJUPSZVQEBUF ̏৯෼ͷ৯ࣄه࿥ன৯

    ^
    ன৯͚ͩߋ৽͍ͯ͠Δ͚Ͳɺ


    ߹ܭӫཆૉ΋มΘͬͯΔ͔Βอଘ͠ͳ͍ͱ͍͚ͳ͍Α

    View Slide

  88. ू໿ͷߏ଄Λ UseCase ʹ࿙Β͢ͱ


    ʮϧʔϧͷप஌పఈ͍ͨ΁Μʯ


    ʮू໿Λมߋͮ͠Β͍ʯͱͳΔ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  89. Repository ͸ू໿͚ͩѻ͏

    View Slide

  90. GVO͋Δखଓ͖\
    ̏৯෼ͷ৯ࣄه࿥3FQPTJUPSZGJOE

    ^
    GVO͋Δखଓ͖\
    ̏৯෼ͷ৯ࣄه࿥BEEன৯ ΞΠε

    ৯ࣄ3FQPTJUPSZVQEBUF ̏৯෼ͷ৯ࣄه࿥

    ^
    ू໿Λऔಘ
    ू໿Λมߋ
    ू໿Λอଘ

    View Slide

  91. ύοέʔδਤʹ൓ө

    View Slide

  92. ͦΕҎ֎
    Application
    Domain
    ίʔυ
    Interface
    Class
    Infrastructure
    UseCase
    RepositoryImpl
    Repository
    ίʔυ
    ू໿

    View Slide

  93. ͱ͜ΖͰɺ


    ू໿ͬͯੜ੒͕ͱͯ΋େม

    View Slide

  94. ɾجຊతʹେ͖͍


    ɾ͍ΖΜͳΦϒδΣΫτΛ࢖͏


    ɾม׵΍Ϛοϐϯά͕͋Δ


    ɾෆ੔߹νΣοΫͷϧʔϧ͕͋Δ

    View Slide

  95. ͦΕҎ֎
    Application
    Domain
    ίʔυ
    Infrastructure
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    ɹ͜͜ʹ new ू໿Λ


    ɹॻ͘͜ͱʹͳͬͯ͠·͏

    View Slide

  96. ͦΕҎ֎
    Application
    Domain
    ίʔυ
    Infrastructure
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    ɹ͘Γ͔͑͠ॻ͖ͨ͘ͳ͍͠ɺ


    ɹͦ΋ͦ΋υϝΠϯϧʔϧͩ͠ɺ


    ɹnew ͸ͬͪ͜ʹॻ͍ͨΑͶ

    View Slide

  97. ू໿ͷੜ੒͸


    Domain ύοέʔδͷ


    Factory Ͱߦ͏

    View Slide

  98. ύοέʔδਤʹ൓ө

    View Slide

  99. ͦΕҎ֎
    Application
    Domain
    ίʔυ
    Infrastructure
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    Factory

    View Slide

  100. Application
    Domain
    Infrastructure
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    Factory
    खଓ͖ σʔλϕʔε
    ;Δ·͍
    ੜ੒ɾ੔߹ੑϧʔϧ

    View Slide

  101. Repository ͷಡΈͱॻ͖Λ෼͚Δ

    View Slide

  102. ॻ͘୯ҐͱಡΉ୯Ґ͸ҧ͏

    View Slide

  103. ॻ͘ͱ͖ ( ू໿ )
    ৯ࣄه࿥ ৯ࣄه࿥
    ৯ࣄه࿥
    ɾछผ: ே৯


    ɾ࣌ؒ: 08:30


    ɾ৯ࣄ: ೲ౾ɺ͝൧


    ɾӫཆૉ: λϯύΫ࣭... ࢷ࣭...


    ɾࣸਅ:
    ɾछผ: ன৯


    ɾ࣌ؒ: 12:34


    ɾ৯ࣄ: ਌ࢠကɺຯḩो


    ɾӫཆૉ: λϯύΫ࣭... ࢷ࣭...


    ɾࣸਅ: image.jpg
    ɾछผ: ༦৯


    ɾ࣌ؒ: 19:51


    ɾ৯ࣄ: ϋϯόʔάɺαϥμ


    ɾӫཆૉ: λϯύΫ࣭... ࢷ࣭...


    ɾࣸਅ: image.jpg
    ಡΉͱ͖ ( ू໿Ͱ͸ͳ͍͜ͱ͕͋Δ )
    ̏৯෼ͷ৯ࣄ࣌ؒ
    ɾே৯ͷ࣌ؒ: 08:30


    ɾன৯ͷ࣌ؒ: 12:34


    ɾ༦৯ͷ࣌ؒ: 19:51

    View Slide

  104. ΋͠ Repository ʹಡΈॻ͖


    ྆ํͷϝιουΛ࡞Δͱ

    View Slide

  105. Α͘Θ͔Βͳ͍ϝιου͕૿͑Δ
    ৯ࣄه࿥ϦϙδτϦ\
    GVOGJOE#Z*E *E
    ू໿
    GVOJOTFSU ू໿

    GVOVQEBUF ू໿

    GVOGJOE#Z6TFS*E 6TFS*E
    ू໿ˡू໿ѻͬͯΔ͔ΒΪϦηʔϑ
    GVOFYJTUT *E
    #PPMˡ͜Ε͸ηʔϑ
    GVOHFU৯ࣄ࣌ؒϦετ *E
    -JTU5JNFˡू໿͸
    GVOHFUன৯ *E
    ৯ࣄˡू໿ͷҰ෦Ͱ͔͠ͳ͍͚Ͳ
    GVOVQEBUF৯ࣄ࣌ؒ *E 5JNF
    ˡू໿࢖Θͳ͍ͷ

    ^
    ϥΠϑαΠΫϧΛѻ͏ͷ͕ू໿Ͱɺ


    Repository ͷ੹຿͸ू໿ͷอଘͱ෮ݩͷ
    ͸͚ͣͩͲ... ͍ͭ͜Β͸...??

    View Slide

  106. ͳΜͰ΋ SQL ॻ͍͍͍ͯͱ͜Ζ


    ʹͳͬͯ͠·͏

    View Slide

  107. ू໿Λ௨ͣ͞ঢ়ଶΛѻ͍ͬͯΔͱ


    ʮ݁ہΫΤϦಡ·ͳ͍ͱΘ͔ΒΜʯͱͳΔ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  108. Ͱ͸ Repository ʹू໿ΛಡΈॻ͖


    ͢Δϝιου͔͠࡞Βͳ͍ͱ

    View Slide

  109. ੑೳతʹແବ͕ଟ͍
    ̍೔લSFQPTJUPSZGJOE#Z*E

    ̎೔લSFQPTJUPSZGJOE#Z*E

    ̏೔લSFQPTJUPSZGJOE#Z*E

    ̏೔ؒͷ৯ࣄ࣌ؒϦετ<̍೔લ࣌ؒ ̎೔લ࣌ؒ ̏೔લ࣌ؒ>
    ɹू໿͕̏ͭඞཁͩͱ


    ɹ̏ճͷ DB ΞΫηε͕ඞཁ
    ɹ৯ࣄ΍ӫཆૉͷ৘ใΛ join ͯ͠


    ɹ෮ݩͨ͠ͷʹɺ͔࣌ؒ͠࢖ͬͯͳ͍

    View Slide

  110. ಡΉॲཧ͸ඞཁ͚ͩͲ


    Repository ʹॻ͘ͷ͸ͬ͘͠Γ͜ͳ͍

    View Slide

  111. ू໿ͷอଘͱ෮ݩ͸ Repository ͱ͠ɺ


    ΄͔ͷॊೈͳࢀর͸ QueryService ͱ͢Δ

    View Slide

  112. ύοέʔδਤʹ൓ө

    View Slide

  113. ͦΕҎ֎
    Application
    Domain
    ίʔυ
    Interface
    Class
    Infrastructure
    QueryService QueryServiceImpl
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    Factory

    View Slide

  114. ৯ࣄه࿥3FQPTJUPSZ\
    GVOGJOE#Z*E *E
    ू໿
    GVOJOTFSU ू໿

    GVOVQEBUF ू໿

    ^
    ৯ࣄه࿥2VFSZ4FSWJDF\
    GVOFYJTUT *E
    #PPM
    GVOHFU৯ࣄ࣌ؒϦετ *E
    -JTU5JNF
    ^
    ू໿ʹूத͢Δ
    ɹू໿Λ࢖Θͳ͍͜ͱ΋͋Δ


    ɹͨͩ͠ ಡΈ ͚ͩ

    View Slide

  115. ࢒ͬͨ෦෼͸֎քͱͷ૭ޱ

    View Slide

  116. ͦΕҎ֎
    Application
    Domain
    ίʔυ
    Interface
    Class
    Infrastructure
    ɹೖྗͷܻ਺νΣοΫ
    ɹϨεϙϯε Json ͷ࡞੒
    ɹUseCase ͷ࣮ߦ
    QueryService QueryServiceImpl
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    Factory

    View Slide

  117. ɹϨεϙϯε Json ͷ࡞੒΍
    UseCase ͷ࣮ߦ͸ API ݻ༗ͷ౎߹

    View Slide

  118. ମॏΛ 10.0 ~ 200.0 ͷখ਺Ͱ


    ѻ͏ͷ͸γεςϜڞ௨ϧʔϧ

    View Slide

  119. ΋͠શͯͷ API Ͱମॏͷ


    όϦσʔγϣϯΛݸผ࣮૷͍ͯ͠Δͱ

    View Slide

  120. API 1 ମॏνΣοΫ 1
    API 2 ମॏνΣοΫ 2
    API 3 ମॏνΣοΫ 3
    API 4 ମॏνΣοΫ 4
    ॏෳίʔυͷϝϯς͸Ҋ֎େม
    ্ݶΛ 210.0 ʹ͍ͨ͠
    ͑ͬ

    View Slide

  121. "ಉ͡" Λ࢓૊ΈͰ͸ͳ͓͘࡞๏Ͱ࣮ݱ͢Δͱ


    ʮมߋͭΒ͍ɺ֬ೝ͍ͨ΁ΜʯͱͳΔ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  122. ݻ༗ͷ౎߹͸ Controller ͱ͠ɺ


    ڞ௨ͷϧʔϧ͸ Request ͱͯ͠ɺ


    ෼͚ͯอक͠Α͏

    View Slide

  123. ύοέʔδਤʹ൓ө

    View Slide

  124. Presentation
    Application Infrastructure
    Domain
    Request
    Controller
    Interface
    Class
    ɹUseCase ͷ࣮ߦ


    ɹϨεϙϯε Json ͷ࡞੒
    ɹೖྗͷܻ਺νΣοΫ
    QueryService QueryServiceImpl
    Repository
    UseCase
    RepositoryImpl
    ू໿
    ίʔυ
    Factory

    View Slide

  125. ࠷ޙʹू໿ʹॻ͖ͮΒ͍


    υϝΠϯϩδοΫʹ͍ͭͯ

    View Slide

  126. ৯ࣄه࿥
    ͲͪΒͷू໿ʹॻ͔͘...
    Χϥμه࿥
    ৯ࣄه࿥ͱΧϥμه࿥͔Βɺ݈߁౓ಘ఺Λࢉग़͢Δ
    ৯ࣄه࿥ಘ఺ܭࢉ Χϥμه࿥

    Χϥμه࿥ಘ఺ܭࢉ ৯ࣄه࿥

    View Slide

  127. ͲͪΒ͔ͷू໿ʹ࣮૷͢Δͱ

    View Slide

  128. ৯ࣄه࿥
    มͳґଘ͕ൃੜ͢Δ
    Χϥμه࿥
    ΋ͱ΋ͱؔ܎ͷͳ͍ 2 ͭͷू໿ʹґଘ͕ൃੜ͢Δ

    View Slide

  129. ৯ࣄه࿥
    ֦ு͠ʹ͘͘ͳΔ
    Χϥμه࿥
    ඞཁͳू໿͕૿͑ͨ࣌ʹΑΓࠔΔ
    ӡಈه࿥
    ʁ
    ʁ

    View Slide

  130. ෆඞཁͳू໿ͷґଘΛൃੜͤ͞Δͱ


    ʮू໿ͷมߋ͕ผͷू໿ʹӨڹ͢Δ͔Βม͑ʹ͍͘ʯ


    ʮू໿ͷؔ܎Λ஌Βͳ͍ͱॲཧΛݟ͚ͭΒΕͳ͍ʯ


    ͱͳΔ


    → ։ൃ଎౓͕௿Լ͢Δ

    View Slide

  131. ू໿ʹ͓͞·Βͳ͍υϝΠϯॲཧ͸


    DomainService ʹ࣮૷͢Δ

    View Slide

  132. ৯ࣄه࿥
    Χϥμه࿥
    υϝΠϯαʔϏε
    υϝΠϯαʔϏεಘ఺ܭࢉ ৯ࣄه࿥ Χϥμه࿥

    View Slide

  133. ৯ࣄه࿥
    Χϥμه࿥
    υϝΠϯαʔϏε
    ू໿͸ಠཱ͍ͯ͠Δ
    υϝΠϯαʔϏεHFU݈߁౓ಘ఺ ৯ࣄه࿥ Χϥμه࿥

    View Slide

  134. ৯ࣄه࿥
    ӡಈه࿥
    υϝΠϯαʔϏεHFU݈߁౓ಘ఺ ৯ࣄه࿥ Χϥμه࿥ ӡಈه࿥

    υϝΠϯαʔϏε Χϥμه࿥
    ֦ு͠΍͍͢

    View Slide

  135. ύοέʔδਤʹ൓ө

    View Slide

  136. Presentation
    Application Infrastructure
    Domain
    Request
    Controller
    Factory
    DomainService
    ू໿
    Interface
    Class
    QueryService QueryServiceImpl
    Repository
    UseCase
    RepositoryImpl

    View Slide

  137. ໨త͸Ռͨͤͦ͏͔

    View Slide

  138. Կͱ࿈ಈ͍ͯ͠Δ͔

    View Slide

  139. Presentation
    Infrastructure
    Application
    Domain

    View Slide

  140. Presentation
    Infrastructure
    Application
    Domain
    ֓೦Ϟσϧਤ
    ৽ίʔε࡞Γ͍ͨ
    Ϣʔεέʔε
    Ϋϥεਤ
    Ϣʔεέʔεهड़
    Ϗδωεؔ܎ͷίʔυ͸...

    View Slide

  141. Presentation
    Infrastructure
    Application
    Domain
    DB ࢓༷ॻ
    ςʔϒϧߏ଄ม͍͑ͨ DB ؔ܎ͷίʔυ͸...

    View Slide

  142. Presentation
    Infrastructure
    Application
    Domain
    API ࢓༷ॻ
    ΞϓϦͷදࣔม͍͑ͨ ֎քؔ܎ͷίʔυ͸...

    View Slide

  143. ଎͘։ൃͰ͖Δ͔

    View Slide

  144. Presentation
    Application Infrastructure
    Domain
    QueryService QueryServiceImpl
    Repository
    UseCase
    Request
    Controller
    RepositoryImpl
    Factory
    DomainService
    ू໿
    ಘ఺ܭࢉϧʔϧ͕มΘͬͨ
    σʔλߏ଄΋ॲཧϑϩʔ΋


    มΘΒͳ͍ͳΒରԠ͸͚ͩ͜͜
    Ͱେৎ෉


    ࣗಈςετʹ DB ΋͍Βͳ͍

    View Slide

  145. Presentation
    Application Infrastructure
    Domain
    QueryService QueryServiceImpl
    Repository
    UseCase
    Request
    Controller
    RepositoryImpl
    Factory
    DomainService
    ू໿
    ςʔϒϧఆٛม͑ͨ
    Infrastructure ͷࣗಈςετ


    ͕௨ͤΕ͹େৎ෉


    Application ͷ Interface ͕


    มߋͳ͠ͳΒଞʹӨڹͳ͠

    View Slide

  146. Presentation
    Application Infrastructure
    Domain
    QueryService QueryServiceImpl
    Repository
    UseCase
    Request
    Controller
    RepositoryImpl
    Factory
    DomainService
    ू໿
    ϑϩʔͳΒ Application Λ֬ೝ


    UseCase ͷࣗಈςετΛ͚ͨ͠
    Ε͹ Infrastructure ͸ϞοΫͰ


    े෼
    ༗ྉձһͷϑϩʔΛม͍͑ͨ

    View Slide

  147. Presentation
    Application Infrastructure
    Domain
    QueryService QueryServiceImpl
    Repository
    UseCase
    Request
    Controller
    RepositoryImpl
    Factory
    DomainService
    ू໿
    ࢀর࣌ʹ਎௕΋ฦͯ͠
    ࢀর৘ใ͸ QueryService Λ


    த৺ʹରԠ͢Ε͹ OK


    View Slide

  148. มߋͷछྨʹԠͯ͡


    ʮ୭ͱԿΛݟͯ࿩͔͢ʯ


    ʮͲ͜Λมߋ͢Δඞཁ͕͋Δ͔ʯ


    ͕໌֬ʹͳΔ

    View Slide

  149. υϝΠϯ஌ࣝΛڞ༗ͯ͠


    υϝΠϯΫϥεΛߋ৽͠ଓ͚ΒΕΔ

    View Slide

  150. υϝΠϯʹ͍ͭͯ


    ߟ͑Δ͕࣌ؒ૿΍ͤΔ

    View Slide

  151. ϦΞʔΩςΫνϟʹΑͬͯ


    ͜͏ͳΓ͍ͨ

    View Slide

  152. ͜͏͍͏෩ʹߟ͑ͳ͕Β


    Ұॹʹ։ൃͤͯ͞΋Β͍ͬͯ·͢

    View Slide