Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clean Architecture

Clean Architecture

Takuma Shimizu

August 01, 2018
Tweet

More Decks by Takuma Shimizu

Other Decks in Programming

Transcript

  1. ΫϦʔϯΞʔΩςΫ
    νϟࣄ࢝Ί
    ٕज़ษڧձ

    View Slide

  2. ΞϓϦ෦େࡕ՝
    ਗ਼ਫ୓ຏ
    !IPLVSPO
    J04
    3VCZPO3BJMT

    View Slide

  3. ΫϦʔϯΞʔΩςΫ
    νϟࣄ࢝Ί
    ٕज़ษڧձ

    View Slide

  4. ͜ͷൃදʹ͍ͭͯ
    w ͜·Ίʹ࣭໰Λड͚෇͚·͢
    w ๨Ε͍ͯͨΒࢦఠ͍ͯͩ͘͠͞!
    w ͦΕҎ֎Ͱ΋్தͰ࣭໰͕͋Ε͹ԿͳΓͱ
    w $MFBO"SDIJUFDUVSFຊ ݪஶɾ຋༁
    Λݩʹߏ੒
    w ΫϦʔϯΞʔΩςΫνϟͷ؊ͱͳΔ෦෼Λநग़

    View Slide

  5. ΫϦʔϯΞʔΩςΫ
    νϟ׬શʹཧղͨ͠
    ໨ඪ 15&

    View Slide

  6. ໨ඪ ݠḮ

    ΫϦʔϯΞʔΩςΫ
    νϟͳΜ͔෼͔Δ

    View Slide

  7. ΫϦʔϯΞʔΩςΫνϟͷ؊
    ޡղू
    ॻ੶঺հ
    ͓஌Βͤ

    View Slide

  8. ΫϦʔϯΞʔΩςΫνϟͷ؊

    View Slide

  9. ࢀরɿIUUQTUIMJHIUDPNCMPHVODMFCPCUIFDMFBOBSDIJUFDUVSFIUNM

    View Slide

  10. View Slide

  11. w ʮΫϦʔϯΞʔΩςΫνϟʯͱ͍͏ΞʔΩςΫνϟ͸ͳ͍
    w ΑΓྑ͍ ΫϦʔϯͳ
    ΞʔΩςΫνϟΛࢦ֓͢೦
    w ஶऀͷ3PCFSU$.BSUJOʹΑΔz$MFBOzγϦʔζͷҰͭ
    w $MFBO$PEF
    w $MFBO$PEFS
    w $MFBO"SDIJUFDUVSF

    View Slide

  12. ࢀরɿIUUQTUIMJHIUDPNCMPHVODMFCPCUIFDMFBOBSDIJUFDUVSFIUNM

    View Slide

  13. View Slide

  14. ΫϦʔϯΞʔΩςΫνϟͷ؊
    w #VTJOFTT3VMFT
    w &OUJUZ
    w 6TF$BTF
    w ґଘํ޲
    w *OUFSGBDF"EBQUFST

    View Slide

  15. #VTJOFTT3VMFT

    View Slide

  16. &OUJUZ
    w $SJUJDBMCVTJOFTTSVMF
    w ׬શʹಠཱ
    w υϝΠϯۦಈઃܭͷυϝΠϯϞσϧ
    w &OUJUZ 3FGFSFODF
    PCKFDUɼ7BMVFPCKFDUɼ4FSWJDF
    w ʰΦϒδΣΫτࢦ޲ιϑτ΢ΣΞ޻ֶ004&ʱ಺ͷ༻ޠ

    View Slide

  17. 6TF$BTF
    w "QQMJDBUJPOTQFDJpDCVTJOFTTSVMF
    w 6* %# ϑϨʔϜϫʔΫͷӨڹ͸ड͚ͳ͍
    w ΞϓϦӡ༻ͷมߋͷӨڹ͸ड͚Δ
    w &OUJUZʢυϝΠϯϞσϧʣͷΫϥΠΞϯτ

    View Slide

  18. #VTJOFTT3VMFT
    w$SJUJDBMCVTJOFTTSVMF
    w"QQMJDBUJPOTQFDJpDCVTJOFTTSVMF
    རӹ૿Ճɺඅ༻࡟ݮʹؔΘΔϧʔϧ΍खଓ͖

    View Slide

  19. $SJUJDBMWT"QQTQFDJpD
    &OUJUZWT6TF$BTF

    w $SJUJDBMखಈͰ΋࣮ߦՄೳ
    w "QQTQFDࣗಈԽ͞Ε͍ͯΔ͜ͱ͕લఏ
    w $SJUJDBMγεςϜ͔Β͸ಠཱ
    w "QQTQFDγεςϜʹґଘ

    View Slide

  20. l$SJUJDBMz

    View Slide

  21. l$SJUJDBMz#VTJOFTT3VMF
    ˣ
    l&OUFSQSJTFz#VTJOFTT3VMF

    View Slide

  22. l&OUFSQSJTFz#VTJOFTT3VMF
    #$ΞϓϦͰ͸ʜ
    w ར༻ऀ͸ෆಛఆଟ਺ͷҰൠϢʔβʔ
    w ൃ஫ݩͷച্΍རӹɺۀ຿ʹ௚઀ӨڹΛ༩͑ͳ͍
    w ͦΖ͹ΜΛ஄͘Α͏ͳखଓ͖͕ଘࡏ͠ͳ͍
    ˠ$SJUJDBM͸"QQMJDBUJPOTQFDJpDͱಉٛʁ

    View Slide

  23. $SJUJDBMͱ"QQTQFDͷҧ͍
    w γεςϜ͔Βೖग़ྗͱͷڑ཭ͷҧ͍
    w มߋස౓ͱมߋཧ༝ͷҧ͍
    w ୯Ұ੹೚ͷݪଇ 4JOHMF3FTQPOTJCJMJUZ1SJODJQMF

    View Slide

  24. ೖग़ྗͷڑ཭
    w ʮ-FWFMʯͱ͍͏֓೦
    w Ϣʔβʔ΍γεςϜͷೖྗͱग़ྗ͔Β཭Ε͍ͯΔ΄Ͳ

    -FWFM͕ߴ͍
    w -FWFM͕ҟͳΕ͹มߋස౓ɾཧ༝΋ҟͳΔ
    w &OUJUZ͔6TF$BTFͰ໎ͬͨΒz-FWFMzΛൺֱ
    w ΑΓ-FWFM͕ߴ͍΄͏Λ&OUJUZʹ෼཭
    w ୯Ұ੹೚ͷݪଇΛద༻͍ͯ͠Ε͹෼཭͸ΑΓ؆୯ʹͳΔ

    View Slide

  25. #VTJOFTT3VMFTͷ·ͱΊ
    w &OUJUZ $SJUJDBM
    ͱ6TF$BTF "QQMJDBUJPOTQFDJpD

    w $SJUJDBM͸γεςϜʹґΒͣɺ"QQTQFD͸γεςϜ͋Γ͖
    w &OUJUZ͸׬શʹಠཱ͠ɺ6TF$BTF͸ͦͷΫϥΠΞϯτ
    w -FWFMͷܭଌͰᐆດ͞ճආ
    w #VTJOFTT3VMFʹ͚ͩͰͳ͘Ͳ͜Ͱ΋ద༻Մೳ

    View Slide

  26. ґଘํ޲
    w ৗʹҰํ޲ʹ͚ͩʹґଘ
    w ґଘؔ܎ٯసͷݪଇ %FQFOEFODZJOWFSTJPOQSJODJQMF

    w ೖग़ྗσʔλ΁ͷґଘ੍໿

    View Slide

  27. Ұํ޲΁ͷґଘ
    w ͜ͷ෦෼
    w ԼҐ-FWFMͷϨΠϠʔ ίϯϙʔωϯτ
    ͸

    ্Ґ-FWFMͷϨΠϠʔ ίϯϙʔωϯτ
    ʹґଘ͢Δ
    w ্Ґ-FWFM͸ɺԼҐ-FWFMͰ࢖༻͞Ε͍ͯΔ໊લΛ

    ར༻ͯ͠͸͍͚ͳ͍
    w ܕ໊ɺϝιουɺϓϩύςΟͳͲ
    w ্Ґ-FWFM͸ɺԼҐ-FWFMͰ࢖༻͞Ε͍ͯΔσʔλߏ଄Λ

    ར༻ͯ͠͸͍͚ͳ͍

    View Slide

  28. ґଘؔ܎ٯసͷݪଇ
    w ͜ͷ෦෼

    View Slide

  29. 6TF$BTF
    $POUSPMMFS
    1SFTFOUFS

    View Slide

  30. 6TF$BTF
    $POUSPMMFS
    1SFTFOUFS

    View Slide

  31. 6TF$BTF
    $POUSPMMFS
    1SFTFOUFS

    View Slide

  32. 6TF$BTF
    1SFTFOUFS

    View Slide

  33. 6TF$BTF
    1SFTFOUFS

    View Slide

  34. 6TF$BTF
    1SFTFOUFS

    View Slide

  35. 6TF$BTF
    1SFTFOUFS
    0VUQVU
    *OUFSGBDF

    View Slide

  36. 6TF$BTF
    1SFTFOUFS
    0VUQVU
    *OUFSGBDF

    View Slide

  37. 6TF$BTF
    1SFTFOUFS
    0VUQVU
    *OUFSGBDF
    6TF$BTF
    1SFTFOUFS

    View Slide

  38. ґଘؔ܎ٯసͷݪଇ
    w্Ґ-FWFMͷϨΠϠʔ ίϯϙʔωϯτ
    ͕

    ԼҐ-FWFMͷϨΠϠʔʹґଘ͢ΔͷΛ๷͙
    w *OUFSGBDFQSPUPDPMΛؒʹڬΜͰ্Ґ-FWFMଆʹ഑ஔ
    w *OUFSGBDF"EBQUFST

    View Slide

  39. ೖग़ྗσʔλ΁ͷґଘ੍໿
    w ୯७ͳσʔλߏ଄ମ
    w ݴޠ૊ΈࠐΈͷϓϨʔϯͳΦϒδΣΫτͰߏ੒
    w ࣗଞͷϨΠϠʔಠࣗͷΦϒδΣΫτ͸ؚΊͳ͍
    w σʔλߏ଄ମ΋Ұͭͷґଘ෺
    w ্Ґ-FWFM͸ɺԼҐ-FWFMͷσʔλߏ଄ମΛ஌Βͳ͍

    View Slide

  40. ґଘํ޲ͷ·ͱΊ
    w ؔ৺ͷ෼཭
    w ґଘํ޲͸ৗʹҰఆ
    w ԼҐ-FWFM͸্Ґ-FWFMʹґଘ$ٯ͸ېࢭ%
    w ϨΠϠʔͷؒΛ·͕ͨΔσʔλߏ଄ʹ΋ద༻͞ΕΔ
    w ্Ґ͕ԼҐʹґଘ͢Δ৔߹͸ґଘؔ܎ٯసͷݪଇ

    View Slide

  41. ΫϦʔϯΞʔΩςΫνϟͷ؊
    w &OUJUZ $SJUJDBM#VTJOFTT3VMF

    w 6TF$BTF "QQMJDBUJPOTQFDJpD#VTJOFTT3VMF

    w l-FWFMz
    w ґଘํ޲ɺґଘؔ܎ٯసͷݪଇ

    View Slide

  42. ؊ͷ֎ଆ
    & &

    View Slide

  43. w *OUFSGBDF"EBQUFS
    w .7$ .77. .71 .717.FUD
    w 42- 3&45"1* (SBQI2-FUD
    w 'SBNFXPSL %SJWFS
    w J04 "OESPJE 8FC .BSJB%# 'JSFCBTFFUD

    View Slide

  44. ΫϦʔϯΞʔΩςΫνϟͷ؊ͷ

    ֎ଆͷ؊
    w ࠾༻͢Δઃܭύλʔϯ΍σʔλϕʔεͳͲͷܾఆΛ୨্͛
    w ΑΓ಺ଆͷ։ൃʹूதͰ͖Δ
    w ຊ౰ͷҙຯͰ֎ଆΛҙࣝ͠ͳ͍ͰࡁΉ

    View Slide

  45. ΫϦʔϯΞʔΩςΫνϟͷ؊
    w &OUJUZ $SJUJDBM#VTJOFTT3VMF

    w 6TF$BTF "QQMJDBUJPOTQFDJpD#VTJOFTT3VMF

    w l-FWFMz
    w ґଘํ޲ɺґଘؔ܎ٯసͷݪଇ

    View Slide

  46. ޡղू

    View Slide

  47. ޡղͦͷ̍
    5SBOTMBUPS͸ඞਢ

    View Slide

  48. ޡղͦͷ̍
    5SBOTMBUPS͸ඞਢ
    ౴͑
    ෆཁ

    View Slide

  49. ޡղͦͷ
    3FQPTJUPSZͱ
    %BUB4UPSF͸ηοτ

    View Slide

  50. ޡղͦͷ
    3FQPTJUPSZͱ
    %BUB4UPSF͸ηοτ
    ౴͑
    ෆཁ

    View Slide

  51. ޡղͦͷ
    .71ύλʔϯΛ࢖͏

    View Slide

  52. ޡղͦͷ
    .71ύλʔϯΛ࢖͏
    ౴͑
    ԿͰ΋͍͍

    View Slide

  53. ޡղͦͷ
    &OUJUZ͸%%%Ͱઃܭ

    View Slide

  54. ޡղͦͷ
    &OUJUZ͸%%%Ͱઃܭ
    ౴͑
    ԿͰ΋͍͍

    View Slide

  55. ޡղͦͷ
    ϨΠϠʔΛ·͙ͨͱ͖
    ʹ3FBDUJWF&YUFOTJPOT
    ศར͡ΌͶʁ

    View Slide

  56. ޡղͦͷ
    ϨΠϠʔΛ·͙ͨͱ͖ʹ
    3FBDUJWF&YUFOTJPOTศར͡Ό
    Ͷʁ
    ౴͑
    ΍Ίͯ

    View Slide

  57. ޡղͦͷ
    ΍Δ͜ͱଟ͘ͳ͔ͬ͢Ͷ

    View Slide

  58. ޡղͦͷ
    ΍Δ͜ͱଟ͘ͳ͔ͬ͢Ͷ
    ౴͑
    ͦͷͱ͓ΓɻͰ΋
    ίʔυϦʔσΟϯά
    ͷෛՙ͸Լ͕Δ

    View Slide

  59. ޡղͦͷ
    ॳݟࡴͩ͠ΑͶʁ

    View Slide

  60. ౴͑
    ॳݟࡴͩ͠ΑͶʁ
    ͏Μɺ
    ͔ͩΒࠓઆ໌ͯ͠Δ

    View Slide

  61. ΫϦʔϯΞʔΩςΫ
    νϟ׬શʹཧղͨ͠
    ໨ඪ 15&

    View Slide

  62. ໨ඪ ݠḮ

    ΫϦʔϯΞʔΩςΫ
    νϟͳΜ͔෼͔Δ

    View Slide

  63. ޡ ਖ਼
    5SBOTMBUPS͸ඞਢ ෆཁ
    3FQPTJUPSZͱ
    %BUB4UPSF͸ηοτ
    ෆཁ
    .71ύλʔϯΛ࢖͏ ͳΜͰ΋͍͍
    &OUJUZ͸%%%Ͱઃܭ ͳΜͰ΋͍͍
    ϨΠϠʔΛ·͙ͨͱ͖ʹ3FBDUJWF&YUFOTJPOศ
    ར͡ΌͶʁ
    ΍Ίͯ
    ΍Δ͜ͱଟ͘ͳ͔ͬ͢Ͷ
    Ӿཡ࣮૷
    ͳΒ΍ΔՁ஋͋Γ

    View Slide

  64. ॻ੶঺հ ݪஶ

    Robert C. Martin,

    Clean Architecture:
    A Craftsman's Guide
    to Software
    Structure and
    Design

    View Slide

  65. ॻ੶঺հ ຋༁

    ϩόʔτɾ$Ϛʔνϯ

    ʰ$MFBO"SDIJUFDUVSFɹ
    ୡਓʹֶͿιϑτ΢ΣΞ
    ͷߏ଄ͱઃܭʱ

    ʢ֯੐యɾߴ໦ਖ਼߂༁ʣ

    View Slide

  66. ॻ੶঺հ ͦͷଞ

    ϰΝʔϯɾϰΝʔϊϯ

    ʰ࣮ફυϝΠϯۦಈઃ
    ܭʱʢߴ໦ਖ਼߂༁ʣ

    View Slide

  67. ॻ੶঺հ ͦͷଞ

    ΤϦοΫɾΤϰΝϯε

    ʰΤϦοΫɾΤϰΝϯε
    ͷυϝΠϯۦಈઃܭʱ

    ʢࠓؔ߶؂म 

    ɹ࿨ஐӈܡɾ຀໺༞ࢠ
    ༁ʣ

    View Slide