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

ベンチャーでドメイン駆動設計をやるとどうなるか? #genbadeDDD

ベンチャーでドメイン駆動設計をやるとどうなるか? #genbadeDDD

Tsuyoshi Yasunishi

May 11, 2019
Tweet

More Decks by Tsuyoshi Yasunishi

Other Decks in Programming

Transcript

  1. ϕϯνϟʔͰ
    υϝΠϯۦಈઃܭΛ΍Δͱ
    Ͳ͏ͳΔ͔ʁ
    ʙ1ZUIPOͰܕʹ׬શʹ౗ͯ͠Έͨʙ
    2019.05.11
    גࣜձࣾνʔϜϘοΫε ҆੢ ߶

    View Slide

  2. νʔϜϘοΫεͬͯʁ

    View Slide

  3. View Slide

  4. View Slide

  5. ৽αʔϏεͱػցֶशʹΑΔ෼ੳγεςϜ΋։ൃத

    View Slide

  6. ձࣾͷ࣌୅എܠ

    View Slide

  7. ˠ࣌୅
    ʢ೥૑ۀʣ

    View Slide

  8. ࣾһਓ

    View Slide

  9. ҰਓͰ࡞ͬͨ

    View Slide

  10. ͘͞Β714্ʹ1ZUIPO

    View Slide

  11. ࣄۀ͕͏·͘ߦ͖ͩͨ͠

    View Slide

  12. ˠ࣌୅
    ʢ೥ʣ

    View Slide

  13. ೖࣾ

    View Slide

  14. 1ZUIPO͔
    ͣͬͱଓ͘
    αʔϏεʹ͍ͨ͠ͳ͊

    View Slide

  15. Ϣʔβ؅ཧ͕྆ํʹ͋Δ͜ͱʹؾͮ͘

    View Slide

  16. Ϣʔβ؅ཧΛ෼཭͠Α͏

    View Slide

  17. 4QSJOH#PPU,PUMJOͰ࡞ͬ
    ͨ

    View Slide

  18. ͜ΕʹՃ͑ͯ৽αʔϏεΛ࡞Ζ͏ʂ

    View Slide

  19. 1ZUIPO΍ͬͨ͜ͱແ͍͠
    ڷʹೖΕ͹ڷʹै͑
    ·ͣ΍ͬͯΈΑ͏

    View Slide

  20. ͕͢͞ʹ.7$͚ͩ͸͖͍ͭ
    ·ͣ͸ϨΠϠʔυΞʔΩςΫνϟ
    ʢͱ͍͏໊ͷ෼͚͚ͨͩʣ

    View Slide

  21. 6*ʢ1SFTFOUBUJPOʣ
    "QQMJDBUJPO
    %PNBJO
    *OGSBTUSVDUVSF
    ˔ ϞσϦϯά͸͋·Γ͍ͯ͠ͳ͍
    ˔ υϝΠϯ૚͸ಠཱ͍ͯ͠ͳ͍ʢଞͷ૚ʹґ
    ଘ͍ͯ͠Δʣ

    View Slide

  22. ϨΠϠʔΛ෼͚Έͯ
    (PPEʂ
    %#΍"1*ΞΫηεͷॲཧΛͲ͜ʹॻ͚͹͍͍͔͕Θ͔Δ
    B ଞͷਓ͕ॻ͍ͨίʔυͰ΋Ͳ͜ʹॻ͍ͯ͋Δ͔͸Θ͔Δ
    03ϚούʔͷϞσϧ͔ΒϏδωεϩδοΫ͸ഉআͰ͖ͨ
    #BEʂ
    ϏδωεϩδοΫͷډॴ͕ᐆດɻॻ͖ํ΋ਓ΍ػೳʹΑͬͯมΘΔɻ
    B υϝΠϯϞσϧශ݂঱ঢ়ଶ
    ͦ͏ͳΔͱ݁Ռతʹ$POUSPMMFS͕ଠΓɺ4FSWJDFͱ͍͏ಾͷDMBTT͕Ͱ͖࢝Ί
    Δ

    View Slide

  23. த్൒୺͸͋·ΓޮՌ͕ͳ͍
    ʢ࣮ײʣ

    View Slide

  24. υϝΠϯϞσϦϯάΛ͍ͨ͠
    ΍ΔͳΒܕ͕΄͍͠ͳ͊ʜ

    View Slide

  25. ("&ͷ1ZUIPOΛ
    ʹ্͛ͨΑʂ
    $50߱ྟ

    View Slide

  26. ͜Ε͸5ZQF)JOU͕
    ࢖͑Δ͡Όͳ͍͔ʜ

    View Slide

  27. 1ZUIPOͰܕʹ
    ౗࣮͢ݧͯ͠ΈΑ͏Αʂ
    ͓લͦΕͩͬͨΒ
    +BWBͰ͑͑΍Μʂ
    https://www.irasutoya.com/2017/08/blog-post_54.html

    View Slide

  28. ؟ͷલʹ͋Δͷ͸1ZUIPOͰ͋Δ
    1ZUIPOͰܕʹ౗ͯ͠ΈΑ͏ʂ
    ʢ࣮͸ڵຯຊҐʣ

    View Slide

  29. جຊܗ

    View Slide

  30. 引数の型指定
    戻り値の型指定
    コメントで型指定

    View Slide

  31. جຊతʹ5ZQF)JOU͸
    ͜Ε͚ͩͰ0,
    ʢ(FOFSJDTͱ͔͸ඞཁແ͠ʣ

    View Slide

  32. *%&

    View Slide

  33. 1ZDIBSNʢ*OUFMMJK*%&"ʣ
    ͜ͷิ׬͕ͳ͍ͱແཧ

    View Slide

  34. NZQZ
    ܕΛνΣοΫͯ͘͠Ε·͢
    1ZDIBSNʹ΋ઃఆ͢ΔͱΑΓྑ͍

    View Slide

  35. little_hand_s さんのqiitaより引用
    https://qiita.com/little_hand_s/items/ebb4284afeea0e8cc752
    υϝΠϯ૚Λ
    ಠཱͤ͞Δ
    ʲج४ʳ
    υϝΠϯ૚ʹ
    ଞͷ૚ͷJNQPSUจ͕ແ͍

    View Slide

  36. little_hand_s さんのqiitaより引用
    https://qiita.com/little_hand_s/items/ebb4284afeea0e8cc752
    "QQMJDBUJPO4FSWJDF͔
    Β
    *OGSBTUSVDUVSF
    ʢ%#ΞΫηεʣ
    Λݺͼ͍ͨ
    Ͱ΋໼ҹ͕ٯʹͳΔ

    View Slide

  37. ͦ͜Ͱ%*

    View Slide

  38. *OUFSGBDF͕ແ͍ͷͰɺܧঝͰදݱ

    View Slide

  39. ɾܕΛCJOE͢Δ
    ɾ%*Ͱ"QQMJDBUJPO4FSWJDFΛJOKFDU͢Δ
    ɾ"QQMJDBUJPO4FSWJDFͰ͸*OUFSGBDFͷܕͰݺͼग़͢

    View Slide

  40. little_hand_s さんのqiitaより引用
    https://qiita.com/little_hand_s/items/ebb4284afeea0e8cc752
    ͍͑ʔ͍
    ґଘؔ܎͕
    ٯ޲͍ͨʂ

    View Slide

  41. ઃܭͯ͠ΈΑ͏

    View Slide

  42. खॱ
    ᶃॳظͷυϝΠϯϞσϧΛ࡞Δ
    ໊લͱৼΔ෣͍Λநग़
    ίʔυʹམͱͯ͠ΈΔ
    ϦϑΝΫλϦϯά͍ͯ͘͠
    ᶄυϝΠϯ૚Ҏ֎Λ࡞͍ͬͯ͘

    View Slide

  43. ᶃॳظͷυϝΠϯϞσϧΛ࡞Δ

    View Slide

  44. Ϣʔεέʔε΍࢓༷Λ༻ҙͯ͠

    View Slide

  45. View Slide

  46. ෇ᝦͰग़͢
    ˞ΠϝʔδͰ͢

    View Slide

  47. ॳظͷυϝΠϯϞσϧΛ࣮૷ͯ͠ΈΔ
    7BMVF0CKFDUΛ࡞ͬͯΈΔ
    ͔͜͜Β࣮૷։࢝
    ˞ύοέʔδҠಈΛߟྀͯ͠DMBTT͝ͱʹϑΝ
    ΠϧΛ෼͚ͯΈͨɻ͕ɺ͜Ε͸ࣦഊɻ

    View Slide

  48. "QQMJDBUJPO૚
    *OGSBTUSVDUVSF૚
    σʔλϞσϧઃܭ
    Λ࡞͍ͬͯ͘

    View Slide

  49. 6*ʢ1SFTFOUBUJPOʣ
    "QQMJDBUJPO
    %PNBJO
    *OGSBTUSVDUVSF

    View Slide

  50. little_hand_s さんのqiitaより引用
    https://qiita.com/little_hand_s/items/ebb4284afeea0e8cc752
    υϝΠϯ૚Λ
    ಠཱͤ͞Δ
    ʲج४ʳ
    υϝΠϯ૚ʹ
    ଞͷ૚ͷJNQPSUจ͕ແ͍

    View Slide

  51. ϙΠϯτ

    View Slide

  52. ᶃݱ࣮ͷݴ༿Λͦͷ··
    ίʔυʹམͱ͢
    ʢϢϏΩλεݴޠʣ

    View Slide

  53. ࢓༷ॻ͚ͩͰͳ͘ɺ
    ීஈ࢖͍ͬͯΔݴ༿ʹײ౓ΛߴΊΔ

    View Slide

  54. ᶄσʔλϞσϧ͸
    υϝΠϯϞσϧͷޙʹઃܭ
    ʢυϝΠϯϞσϧ͕σʔλϞσϧʹӨڹ͞ΕΔͷ
    Ͱʣ

    View Slide

  55. ᶅϞσϧΛҭͯΔ

    View Slide

  56. いったり来たり
    俯瞰 詳細

    View Slide

  57. Ϟσϧʹ౴͑͸ͳ͍ɻ

    View Slide

  58. ΍ͬͯΈͯ
    Ͳ͏͔ͩͬͨʁ

    View Slide

  59. ͳ͔ͥͱ͍͏ͱɺߏ଄Λઌʹ࡞ΔͷͰ
    ϩδοΫʹͨͲΓண͘ͷ͕࠷ޙͷํͰ
    ΋Ͳ͔͠͞Λײͨ͡ͷͰ͸ͳ͔Ζ͏͔
    ᶃ࠷ॳ͸গ͠ख͕͔͔ؒΔ
    ײ͕͢͡Δ
    ౰ࣾൺ

    View Slide

  60. ᶄͲ͜ʹԿ͕͋Δ͔͕
    Θ͔Γ΍͍͢
    ଞਓɺաڈͷࣗ෼͕ॻ͍ͨίʔυɺͲͪΒͰ΋
    ߏ଄ͱ໊લ͕໌֬ͳͷͰɺͨͲΓ΍͍͢

    View Slide

  61. ᶅมߋ͕҆৺
    ࠷ߴʹؾ͕͍͍࣋ͪɻ
    ݁ߏେ͖ͳमਖ਼΋҆৺ײ͕͋Δ

    View Slide

  62. ᶆ5ZQF)JOUͰ΋ͦͦ͜͜େৎ

    ܕ͕͋Δݴޠ࢖͑Αɺͱ͍͏࿩͕ͩɺ
    ʢͩͬͯ໨ͷલʹ1ZUIPO͕͋ͬͨΜͩ΋ͷʣ
    1ZUIPOͰ΋*%&͕ิ׬ͯ͘͠ΕΔͷͰॆ෼Ͱ͖Δ
    1)1Ͱ΋͍͚ΔͷͰ͸ͳ͍ͩΖ͏͔

    View Slide

  63. ᶇ։ൃʹ౷Ұੑ͕ੜ·ΕΔ
    υϝΠϯϞσϧΛআ͘ͱ͋Δఔ౓ɺܗ͸Ͱ͖Δ
    Ϟσϧͷձ࿩Λଓ͚Ε͹
    ίϛϡχέʔγϣϯίετ͕গͳ͍

    View Slide

  64. ᶈDMBTT͝ͱͳͲ
    ࡉ͔͍ςετ͕ඞཁͳͦ͞͏
    ܕ͕୲อͯ͘͠ΕΔ
    ઃܭ͕͔ͬ͠Γ͍ͯ͠Ε͹ɺෳࡶͳܭࢉ΍
    "QQMJDBUJPO4FSWJDF΍$POUSPMMFS͝ͱͰ୲อ͠΍͍͢

    View Slide

  65. ࠓޙͷ՝୊

    View Slide

  66. ᶃͦ͜·ͰϞσϧ͕ҭͬͯͳ͍
    ΋ͬͱϦϑΝΫλϦϯά͠ͳ͚Ε͹

    View Slide

  67. ᶄ΍Γ͗ͨ͢ͱ͜Ζʁ
    DMBTT͝ͱʹϑΝΠϧΛ෼͚ͨͷ͸ࣦഊɻ͍͔ͭ໭͢
    ʢ*OUFMMJK*%&"Ͱมߋ͕஗͘ͳͬͨʜʣ
    ͋Εɺଞʹ͸ແ͍ͳʁʁʁ

    View Slide

  68. ᶅ1ZUIPOΤϯδχΞ͕ೖͬͨ
    Β
    ࠔ࿭͢ΔͷͰ͸ͳ͔Ζ͏͔
    ࿩ͤ͹Θ͔Δͱ৴͍ͯ͡Δ

    View Slide

  69. ࢥͬͨ͜ͱ

    View Slide

  70. ˠˠˠˠ㱣

    View Slide

  71. ˠˠˠˠ㱣
    探そう 探しつつ
    伸ばそう
    もっと
    伸ばそう
    もっともっと
    伸ばそう

    View Slide

  72. 複雑度(変更コスト)が指数関数的に上がっていく
    ˠˠˠˠ㱣
    サクッと
    作って検証
    人が増えてきた
    なんか開発が
    遅い感じがする
    あぁ辛い
    作り直したい
    厳しい
    辛すぎる
    もう無理だ…

    View Slide

  73. ˠˠˠˠ㱣
    ここに不可逆な
    境界線が????

    View Slide

  74. ˠˠˠˠ㱣
    ここで
    大幅に設計をしなおすことが
    大事なのではないか

    View Slide

  75. ͜Ε͕ͦͷޙͷมߋίετΛ
    େ෯ʹԼ͛Δ

    View Slide

  76. ここが最も価値がある

    View Slide

  77. View Slide

  78. ৽͍͠΋ͷΛ௥Ճͭͭ͠΋
    ෳࡶͳ΋ͷΛ੔ཧ͠ଓ͚Δ

    View Slide

  79. ෳࡶͳ΋ͷΛෳࡶͳ··ѻ͏
    ෳࡶͳ΋ͷ͕୯७ʹͳΔຐ๏͸
    ͳ͍

    View Slide

  80. ͦͷͱ͖ʹυϝΠϯۦಈઃܭΛ
    બ୒͢Δͱྑ͍ͱࢥ͏

    View Slide

  81. ஥ؒΛେେืूதͰ͢ʂ
    ˔ ෭ۀɾϑϦʔϥϯεΤϯδχΞืूʂ
    ˓ ࣌ؒ΋৔ॴ΋࢓ࣄ಺༰΋ࣗ༝
    ˓ ݁Ռతʹ࢓ࣄ͠ͳͯ͘΋͍͍ͷͰɺҰ୴4MBDLʹೖΖ͏ʂ
    ˓ 1ZUIPOɺ7VFKTɺ,PUMJOɺJ04ͳͲ
    ˔ ΤϯδχΞࣾһืूʂ
    ˓ ਓͷ੒௕ʹڵຯ͕͋Δํ
    ˓ ಇ͘৔ॴɺ࣌ؒࣗ༝
    ˓ ձٞ΋৘ใ΋Φʔϓϯ
    ˓ ෭ۀࣗ༝
    ͓ؾܰʹ͝࿈བྷ͍ͩ͘͞ʂ
    IUUQTXXXXBOUFEMZDPNQSPKFDUT

    View Slide