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

DDD Demystified ~結局DDDとは何なのか?何でないのか?~ #phperkaigi_reject

DDD Demystified ~結局DDDとは何なのか?何でないのか?~ #phperkaigi_reject

PHPerKaigi2023 リジェクトコンで発表するスライドです。
エリック・エヴァンスの『ドメイン駆動設計』日本語版から11年。後発の書籍も多数出版され、各カンファレンスでDDDについて話す人も増えてました。PHPerの中にも実際にDDDで開発する(?)・DDDを実践する(?)人や組織も増えてきたと思います。
約10年前、まだPHPerでDDDを学ぶ人が少なかった頃から、私はPHPメンターズの指導を受けてDDD本を読み、楽しみながら・苦しみながらDDDを意識して開発してきました。コードサンプルを交えながら、実際にやってきた中で学んだこと、世間のDDDに対する言説に対して思うことについてお話しします。

Hiromi Hishida

March 13, 2023
Tweet

More Decks by Hiromi Hishida

Other Decks in Programming

Transcript

  1. !XFC UI.BSDI BU1)1FS,BJHJ3FKFDU$POGFSFODFCZ."$MPVE
    %%%%FNZTUJGJFE
    ݁ہɺυϝΠϯۦಈઃܭͱ͸Կͳͷ͔ʁԿͰͳ͍ͷ͔ʁ

    View full-size slide

  2. w 1)1FSྺ೥
    w ೥ʙ೥ϑϦʔϥϯε։ൃऀ
    w ೥ʙ೥݄ʢגʣΧϧςοτίϛϡχέʔγ
    ϣϯζΤϯδχΞɾϦʔυΤϯδχΞɾϚωʔδϟʔ
    w ೥݄ʙʢגʣϦϯέʔδΤϯδχΞIUUQT
    XFCIBUFOBCMPHDPNFOUSZ

    w ༧๷ҩྍϓϩμΫτΛ࡞͍ͬͯ·͢
    w ೔ຊ4ZNGPOZϢʔβʔձ /BHPZBQIQ
    w 1)1FS,BJHJͰϙελʔηογϣϯ͠·͢ʮࣦഊ͔Β
    ֶͿΦʔφʔγοϓܽ๡঱΁ͷॲํᝦʯIUUQTGPSUFFKQ
    QIQFSLBJHJQSPQPTBMDEFG
    CDCDDFEGEED
    ࣗݾ঺հ
    ঁੑͷ݈߁՝୊αϙʔτ
    GFNDMF
    ͔͔Γ͚ͭอ݈ࢣGPS-*/&
    ϝϯλϧ΢ΣϧωεαʔϏε
    SBTJLB

    View full-size slide

  3. ͜ͷτʔΫͷ໨త
    w ͢΂ͯͷݱ৔ɾ͢΂ͯͷϨϕϧͷ1)1FSʹͱͬͯ%%%͕೉͘͠ͳ͍͜ͱΛ஌
    ͬͯ΋Β͏
    w ΍ͬͨͭ΋Γ%%%Ͱຬ଍͍ͯ͠Δ1)1FSʹυΩοͱͯ͠΋Β͏

    View full-size slide

  4. υϝΠϯۦಈઃܭʢ%%%ʣ
    w %PNBJO%SJWFO%FTJHO

    View full-size slide

  5. υϝΠϯۦಈઃܭʢ%%%ʣ
    ॻӨ

    View full-size slide

  6. υϝΠϯۦಈઃܭʢ%%%ʣ

    View full-size slide

  7. υϝΠϯۦಈઃܭʢ%%%ʣ
    w 5XJUUFSݕࡧ%%%IUUQTUXJUUFSDPNTFBSDI
    R%%%TSDUZQFE@RVFSZ
    w 5XJUUFSݕࡧυϝΠϯۦಈઃܭIUUQTUXJUUFSDPNTFBSDI
    R&&"&"&#&"
    &#&""%&"TSDUZQFE@RVFSZ

    View full-size slide

  8. w ংจ
    w ·͕͖͑
    w ୈ෦υϝΠϯϞσϧΛػೳͤ͞Δ
    w ୈ෦Ϟσϧۦಈઃܭͷߏ੒ཁૉ
    w ୈ෦ΑΓਂ͍ಎ࡯΁޲͔͏ϦϑΝ
    ΫλϦϯά
    w ୈ෦ઓུతઃܭ
    w ݁࿦
    υϝΠϯۦಈઃܭʢ%%%ʣ

    View full-size slide

  9. w ংจ
    w ·͕͖͑
    w ୈ෦υϝΠϯϞσϧΛػೳͤ͞Δ
    w ୈ෦Ϟσϧۦಈઃܭͷߏ੒ཁૉ
    w ୈ෦ΑΓਂ͍ಎ࡯΁޲͔͏ϦϑΝ
    ΫλϦϯά
    w ୈ෦ઓུతઃܭ
    w ݁࿦
    υϝΠϯۦಈઃܭʢ%%%ʣ
    Ͳ͕͜Ұ൪େࣄͩͱࢥ͍·͔͢ʁ

    View full-size slide

  10. υϝΠϯۦಈઃܭʢ%%%ʣ
    w ংจ
    w ·͕͖͑
    w ୈ෦υϝΠϯϞσϧΛػೳͤ͞Δ
    w ୈ෦Ϟσϧۦಈઃܭͷߏ੒ཁૉ
    w ୈ෦ΑΓਂ͍ಎ࡯΁޲͔͏ϦϑΝ
    ΫλϦϯά
    w ୈ෦ઓུతઃܭ
    w ݁࿦
    ͜͜ʂ

    View full-size slide

  11. ྫ୊
    w ੜ೥݄೔σʔλΛ3%#ʹอଘ͍ͨ͠ɻ
    w ެతػؔʹग़͢ॻྨΛ࡞ΔجૅσʔλͳͷͰ࿨ྐྵද͕ࣔඞཁɻ

    View full-size slide

  12. ղ๏
    w ΤϯδχΞ͸࿨ྐྵͷ࢓૊ΈΛ஌Βͳͯ͘ྑ͍
    w Ϣʔβʔ͕ʮত࿨ʯʮฏ੒ʯʮྩ࿨ʯ͔ΒબͿ6*
    w ʮত࿨ʯͷNBY ʮฏ੒ʯͷNJONBY ʮྩ࿨ʯͷNJOΛJGจͰ͕Μ͹ͬͯό
    Ϧσʔγϣϯͨ͠ޙͰ3%#ʹอଘ͢ΔτϥϯβΫγϣϯεΫϦϓτ

    View full-size slide

  13. ղ๏
    w ΤϯδχΞ͸࿨ྐྵͷ࢓૊ΈΛ஌Βͳͯ͘ྑ͍
    w Ϣʔβʔ͕ʮত࿨ʯʮฏ੒ʯʮྩ࿨ʯ͔ΒબͿ6*
    w ʮত࿨ʯͷNBY ʮฏ੒ʯͷNJONBY ʮྩ࿨ʯͷNJOΛJGจͰؤுͬͯόϦ
    σʔγϣϯɻʮݩ߸ʯ7BMVF0CKFDUΛ࡞Γɺʮੜ೥݄೔ʯ&OUJUZΛ࡞Γɺ
    3FQPTJUPSZΛ௨ͯ͠3%#ʹอଘ͢Δ6TF$BTFΫϥεɻ

    View full-size slide

  14. ղ๏
    w ΤϯδχΞ͸࿨ྐྵͷ࢓૊ΈΛֶͿ
    w Ϣʔβʔ͕ʮত࿨ʯʮฏ੒ʯʮྩ࿨ʯ͔ΒબͿ6*
    w Ϣʔβʔͷೖྗ஋ΛҰ୴੢ྐྵʹม׵͔ͯ͠Βʮত࿨ʯʮฏ੒ʯʮྩ࿨ʯͦΕ
    ͧΕͷNJONBYͷ:NEͱͷൺֱͰόϦσʔγϣϯʢͳͥͳΒݩ߸ͬͯͦ͏
    ͍͏΋ͷ͔ͩΒʣ͠ɺ3%#ʹอଘ͢ΔτϥϯβΫγϣϯεΫϦϓτ

    View full-size slide

  15. ղ๏
    w ΤϯδχΞ͸࿨ྐྵͷ࢓૊ΈΛֶͿ
    w Ϣʔβʔ͕ʮত࿨ʯʮฏ੒ʯʮྩ࿨ʯ͔ΒબͿ6*
    w ੢ྐྵͰೖྗ͢Δ6*΋ݕ౼ʢ˞QIQFSLBJHJ౰೔ɺϙελʔηογϣϯʮࣦഊ͔ΒֶͿ
    Φʔφʔγοϓܽ๡঱΁ͷॲํᝦʯΛ͝ཡ͍ͩ͘͞ʣ
    w Ϣʔβʔͷೖྗ஋ΛҰ୴੢ྐྵʹม׵͔ͯ͠Βʮত࿨ʯʮฏ੒ʯʮྩ࿨ʯͦΕͧΕͷݩ߸
    όϦσʔλͰ:NEͱͷൺֱʹΑΓͦΕͧΕͷNJONBYΛݕূ͠ɺʮੜ೥݄೔ʯ&OUJUZ
    Λ࡞ͬͯ3FQPTJUPSZΛ௨ͯ͠3%#ʹอଘ͢Δ6TF$BTFΫϥεɻ&OUJUZʹ͸੢ྐྵΛอଘ
    ͠ɺදࣔ࣌ʹݩ߸Λࢉग़ͯ͠ϏϡʔʹදࣔʢͦͷࡍɺඞཁʹԠͯ͡ݩ߸7BMVF0CKFDUΛ
    ૊ΈཱͯΔ͔΋͠Εͳ͍ʣɻ

    View full-size slide

  16. Ͳͷղ๏͕%%%తʁ

    View full-size slide

  17. Ͳͷղ๏͕%%%తʁ
    w όϦσʔγϣϯʹόά͕͋ͬͨͱ͖
    w େਖ਼ੜ·ΕͷϢʔβʔ͕དྷͨͱ͖
    w ֎ࠃਓͷϢʔβʔʹ΋ରԠ͍ͨ͠ͱ͖
    w ྩ࿨YY೥ɺʮ࣍ͷݩ߸͸Ͱ͢ʂʯͷͱ͖

    View full-size slide

  18. Ͳͷղ๏͕%%%తʁ
    w ղ๏ʜΑ͋͘ΔԌ্։ൃɻӡ͕ྑ͚Ε͹ϩʔϯν͸͞ΕΔ͕อक୲౰ٽ͔ͤɻ
    w ղ๏ʜҰݟ͖Ε͍ͳίʔυ͕ͩɺվम͸େมɻ։ൃऀʹυϝΠϯ஌͕ࣝཷ·ͬ
    ͓ͯΒͣɺόϦΤʔγϣϯͷํ޲͕༧ଌͰ͖ͳ͍ɻ
    w ղ๏ʜҰݟԚ͍ίʔυ͕ͩɺ։ൃऀʹυϝΠϯ஌͕ࣝཷ·͍ͬͯΔͷͰͳΜͱ
    ͔վम͸Ͱ͖ͦ͏ɻ
    w ղ๏ʜ։ൃऀʹυϝΠϯ஌͕ࣝཷ·͍ͬͯΔ্ʹɺࣗಈςετ΋੔උ͠΍͢
    ͍ɻύʔϑΣΫτʂʂ

    View full-size slide

  19. Ͳͷղ๏͕%%%ʁ
    w ࣗಈςετ͕ॻ͚ͯɺมߋ͕༰қ
    w վम͠΍͍͢͜ͱʹΑΓɺϏδωεͷมԽʹૉૣ͘ରԠ͠΍͍͢
    w ։ൃऀʹυϝΠϯ஌͕ࣝஷ·Δ
    w ։ൃऀͷࢹ఺ͰυϝΠϯΛݟΔ͜ͱͰɺϏδωεଆ͕ؾ͍͍ͮͯͳ͔ͬͨ஌
    ݟ΋ఏڙͰ͖Δ

    View full-size slide

  20. Ͳͷղ๏͕%%%ʁ
    w ࣗಈςετ͕ॻ͚ͯɺมߋ͕༰қˡΤϯδχΞɺ͚ͩ͜͜ʹ஫໨͕ͪ͠
    w վम͠΍͍͢͜ͱʹΑΓɺϏδωεͷมԽʹૉૣ͘ରԠ͠΍͍͢
    w ։ൃऀʹυϝΠϯ஌͕ࣝஷ·Δ
    w ։ൃऀͷࢹ఺ͰυϝΠϯΛݟΔ͜ͱͰɺϏδωεଆ͕ؾ͍͍ͮͯͳ͔ͬͨ஌
    ݟ΋ఏڙͰ͖Δ

    View full-size slide

  21. υϝΠϯۦಈઃܭʢ%%%ʣͱ͸Կ͔ʁ
    w ʮ͔ͬ͠ΓυϝΠϯ஌ࣝʹ޲͖߹͏ʯͱ͍͏࢟੎ɾ͋Γํ
    w ΍Γํࣗମ͸৭ʑ૊Έ߹ΘͤՄೳ
    w .7$ ΫϦʔϯΞʔΩςΫνϟ τϥϯβΫγϣϯεΫϦϓτ
    w ϞϊϦε ϞδϡϥϞϊϦε ϚΠΫϩαʔϏε

    View full-size slide

  22. υϝΠϯۦಈઃܭʢ%%%ʣͱ͸ԿͰͳ͍͔ʁ
    w ʮ࣮૷ͷ΍ΓํʯͰ͸ͳ͍
    w ʮΫϦʔϯΞʔΩςΫνϟͰͳ͚Ε͹ͳΒͳ͍ʯΘ͚Ͱ͸ͳ͍
    w ʮ࣮૷ͷύλʔϯʯͰ΋ͳ͍
    w 3FQPTJUPSZ &OUJUZ 7BMVF0CKFDUΛ࢖Θͳ͚Ε͹͍͚ͳ͍Θ͚Ͱ΋ͳ͍
    ͠ɺ࢖͍ͬͯ͑͞Ε͹ྑ͍Θ͚Ͱ΋ͳ͍

    View full-size slide

  23. ͜ͷτʔΫͷ໨త
    w ͢΂ͯͷݱ৔ɾ͢΂ͯͷϨϕϧͷ1)1FSʹͱͬͯ%%%͕೉͘͠ͳ͍͜ͱΛ஌
    ͬͯ΋Β͏
    w ΍ͬͨͭ΋Γ%%%Ͱຬ଍͍ͯ͠Δ1)1FSʹυΩοͱͯ͠΋Β͏

    View full-size slide

  24. %%%%FNZTUJGJFE
    w ংจ
    w ·͕͖͑
    w ୈ෦υϝΠϯϞσϧΛػೳͤ͞Δ
    w ୈ෦Ϟσϧۦಈઃܭͷߏ੒ཁૉ
    w ୈ෦ΑΓਂ͍ಎ࡯΁޲͔͏ϦϑΝ
    ΫλϦϯά
    w ୈ෦ઓུతઃܭ
    w ݁࿦
    ·ͣ͸͜͜Λ܁Γฦ͠ಡ΋͏ʂ

    View full-size slide

  25. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ

    View full-size slide