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

Go製MVCアプリケーションのアーキテクチャを変更する

inari111
January 29, 2020

 Go製MVCアプリケーションのアーキテクチャを変更する

inari111

January 29, 2020
Tweet

Other Decks in Programming

Transcript

  1. Go੡MVCΞϓϦέʔγϣϯͷ
    ΞʔΩςΫνϟΛมߋ͢Δ
    2020.01.29 howtv.go - @inari111

    View Slide

  2. • ܊ ୓࠸
    • Twitter: @inari111
    • GitHub: @inari111
    • Go / Layered Architecture / Protocol buffers
    • 2019.04~ hey (Coiney)
    • πέ෷͍
    ࣗݾ঺հ

    View Slide

  3. View Slide

  4. ి࿩൪߸Λೖྗ
    SMSૹ৴
    λοϓͯ͠ಉҙͰ
    πέ෷͍׬ྃ
    2ϲ݄Ҏ಺ʹίϯϏχ౳Ͱࢧ෷͍

    View Slide

  5. • ࠓͷπέ෷͍ͷΞʔΩςΫνϟ
    • ࠓͷΞʔΩςΫνϟͷ໰୊఺
    • ৽͍͠ΞʔΩςΫνϟ(Ծ)
    ࠓ೔࿩͢͜ͱ

    View Slide

  6. ϑϨʔϜϫʔΫ͸revelΛ࢖༻
    app
    ᵓᴷᴷ client
    ᵓᴷᴷ controllers
    ᵓᴷᴷ library
    ᵓᴷᴷ models
    ᵓᴷᴷ routes
    ᵓᴷᴷ services
    ᵋᴷᴷ views
    ࠓͷΞʔΩςΫνϟ
    $POUSPMMFS
    4FSWJDF
    .PEFM
    .PEFMͷؔ਺ݺͼग़͠
    $MJFOU
    4.4ૹ৴
    ֎෦"1*
    ϏδωεϩδοΫ
    ӬଓԽॲཧ

    View Slide

  7. •ModelԼ͕ؔ਺ʹͳ͍ͬͯΔՕॴ͕ଟ͍

    ؔ਺໊͕௕͘ͳͬͯ͠·͏

    GetConsumerByPhoneNumber, UpdateSettlementToXXX…

    ؔ਺ͳͷͰͲͷService͔ΒͰ΋ݺͼग़ͤͯ͠·͏
    • mockԽ͕εϚʔτʹͰ͖ͳ͍
    •Modelͷίʔυ͕ଟ͘ͳ͖ͬͯͨ
    •Model͕domain΍infraͷ໾ׂΛ୲͍ͬͯΔ
    •ӬଓԽͷॲཧͱυϝΠϯϩδοΫ͕෼཭Ͱ͖͍ͯͳ͍
    ໰୊఺

    View Slide

  8. •ίʔυྔ͕૿͖͑ͯͯɺϝϯςͮ͠Β͍Օॴ͕ग़͖ͯͨ
    •υϝΠϯϩδοΫͱӬଓԽॲཧΛ෼͚Δ͜ͱͰؔ৺ࣄͷ෼཭
    Λߦ͍͍ͨ
    ͳͥΞʔΩςΫνϟΛมߋ͍ͨ͠ͷ͔

    View Slide

  9. ৽͍͠
    ΞʔΩςΫνϟ(Ծ)
    $POUSPMMFS
    %PNBJO
    4FSWJDF
    .PEFM
    3FQPTJUPSZݺͼग़͠
    $MJFOU
    4.4ૹ৴
    ֎෦"1*
    ϏδωεϩδοΫ
    3FQPTJUPSZ*OUFSGBDF
    %#Ϟσϧ
    3FQPTJUPSZ࣮૷
    2VFSZ4FSWJDF*OUFSGBDF
    2VFSZ4FSWJDF࣮૷
    ࢀরܥϞσϧ
    υϝΠϯϞσϧ

    View Slide

  10. • υϝΠϯϞσϧ
    • ϏδωεϩδοΫ
    • Repositoryͷinterface
    Domain
    $POUSPMMFS
    %PNBJO
    4FSWJDF
    .PEFM
    3FQPTJUPSZݺͼग़͠
    ϏδωεϩδοΫ
    3FQPTJUPSZ*OUFSGBDF
    %#Ϟσϧ
    3FQPTJUPSZ࣮૷
    2VFSZ4FSWJDF*OUFSGBDF
    2VFSZ4FSWJDF࣮૷
    ࢀরܥϞσϧ
    υϝΠϯϞσϧ

    View Slide

  11. domain/consumer/repository.go

    View Slide

  12. services/consumer.go

    View Slide

  13. • DBϞσϧ
    • Repositoryͷ࣮૷
    • υϝΠϯϞσϧ 㲗 DBϞσϧ
    • Query Serviceͷ࣮૷
    Model
    $POUSPMMFS
    %PNBJO
    4FSWJDF
    .PEFM
    3FQPTJUPSZݺͼग़͠
    ϏδωεϩδοΫ
    3FQPTJUPSZ*OUFSGBDF
    %#Ϟσϧ
    3FQPTJUPSZ࣮૷
    2VFSZ4FSWJDF*OUFSGBDF
    2VFSZ4FSWJDF࣮૷
    ࢀরܥϞσϧ
    υϝΠϯϞσϧ

    View Slide

  14. • ෳ਺ू໿ʹ·͕ͨΔσʔλΛऔಘ
    ͢ΔͨΊʹಋೖ
    • ServiceʹࢀরܥϞσϧɺ
    interfaceΛఆٛ
    • interfaceͷ࣮૷͸Modelʹஔ͘
    Query Service
    $POUSPMMFS
    %PNBJO
    4FSWJDF
    .PEFM
    3FQPTJUPSZݺͼग़͠
    ϏδωεϩδοΫ
    3FQPTJUPSZ*OUFSGBDF
    %#Ϟσϧ
    3FQPTJUPSZ࣮૷
    2VFSZ4FSWJDF*OUFSGBDF
    2VFSZ4FSWJDF࣮૷
    ࢀরܥϞσϧ
    υϝΠϯϞσϧ

    View Slide

  15. • ৽نػೳ௥ՃΛࢭΊͣʹ͍͍ײ͡ʹϦϑΝΫλΛਐΊ͍ͯ͘ʹ͸
    • ෳ਺Repositoryʹ·͕ͨΔτϥϯβΫγϣϯ
    • ServiceͰτϥϯβΫγϣϯுΔ͔͠ͳ͍…ʁ
    • ίʔυྔ͕૿͑ͯ͘ΔͱMVCͩͱͭΒ͍…ͱࢥ͏
    ೰Έ

    View Slide

  16. • RepositoryͷಋೖʹΑΓӬଓԽॲཧͱυϝΠϯϩδοΫ
    ͷ෼཭Λߦ͏͜ͱʹͨ͠
    • Query ServiceΛ࡞੒ͯ͠ෳ਺ू໿ʹ·͕ͨΔσʔλΛ
    औಘ͢Δ͜ͱʹͨ͠
    • DDD΍CQRSΛಋೖ͢Δ͜ͱ͕໨తͰ͸ͳ͍͕ɺ
    ΑΓ҆શͰϝϯς͠΍͍͢ίʔυΛ໨ࢦͨ݁͠Ռ
    ͜ΕΒΛऔΓೖΕ͍ͨͱࢥͬͨ
    ·ͱΊ

    View Slide