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

いろいろな経験を記事にまとめてみたことで学んだこと

 いろいろな経験を記事にまとめてみたことで学んだこと

BPStudy#186〜DDD(ドメイン駆動設計)の真価を学ぼう
https://bpstudy.connpass.com/event/274676/
にてお話した際のプレゼン資料です。

Software Design誌の2023年2月号で「ドメイン駆動設計入門」が特集記事として掲載されたのですが、その記事を書いた中で学んだことについてまとめました。
・本丸である業務ルールに焦点を合わす
・経験していた4つの視点
・改めて「言葉の意味」を考える
という学びを中心に書いています。

#ドメイン駆動設計 #ドメインモデル #設計 #ビジネスロジック #BPStudy #irofさんの絵

KentaroTakasaki

February 22, 2023
Tweet

More Decks by KentaroTakasaki

Other Decks in Programming

Transcript

  1. Έͨ͜ͱͰ
    ͍Ζ͍Ζͳ
    ܦݧΛ
    هࣄʹ·ͱΊͯ
    ֶΜͩ͜ͱ

    View Slide


  2. View Slide

  3. എܠΛଊ͑Δ


    ਪ͠ͷϢχϑΥʔϜΛ
    ணͯొஃ͢Δ͜ͱ

    View Slide

  4. ߴ

    ݈


    גࣜձࣾΞΫςΟΞɹ$00
    ঊक़ɹक़௕
    %%%"MMJBODFओ࠵
    3%3".FFU6Qओ࠵
    Ϟσϧϕʔειϑτ΢ΣΞ։ൃίϛϡχςΟओ࠵
    Α͜͸·Ϋϥ΢υษڧձओ࠵
    ,FOUBSP5","4",*
    ڊ ਓ ϑ ϯ
    Ν

    View Slide

  5. גࣜձࣾΞΫςΟΞ
    ࣗࣾͰ։ൃΛ͢ΔࡍʹɺϞσϦϯά͋Γ͖Ͱ։ൃΛߦ͏؀ڥ

    ཁ݅ఆٛɺઃܭͱϞσϦϯάΛͯ͠ɺձࣾϝϯόʔͱڞʹޠΓ߹͍

    ָ͠Έͳ͕Β։ൃ࣮ࢪ΍ࣗಈੜ੒ʹΑΔޮ཰ԽΛݕ౼͢Δ͜ͱͰɺ

    ೔ʑɺઃܭ΍ϞσϦϯάʹ͍ͭͯ୳ڀ͠ͳ͕ΒʮϏδωεͷ੒௕Λࢧ͑Δʯ։ൃΛ࣮ࢪɻ

    View Slide

  6. גࣜձࣾΞΫςΟΞ
    ࣾһืूதʂ
    +BWB✕%%%
    ͷೱ͍؀ڥ

    View Slide

  7. ֶ

    View Slide

  8. ͍Ζ͍ΖͳܦݧΛ·ͱΊΔதͰɺ
    ຊؙͰ͋Δۀ຿ϧʔϧʹয఺Λ߹Θ͢
    ܦݧ͍ͯͨͭ͠ͷࢹ఺
    ΢ΥʔλʔϑΥʔϧతͳ΍Γํ͸ɺ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ΁ஈ֊తʹཁ݅ఆٛˠ֎෦ઃܭˠ಺෦ઃܭͱਐΜ
    で
    ͍͖·͢ɻ

    Ξ
    プ
    ϦέʔγϣϯશମΛ֎ଆ͔Βఆ͍͖ٛͯ͠ɺ࠷ޙͷ࣮૷࡞ۀΛߦ͏΍Γํ
    で
    ͢ɻ

    ʮ֎ງ͔Β
    じ
    ͬ͘ΓͱຒΊͯຊؙΛམͱ͍ͯ͘͠ʯͱ͍ͬͨελΠϧͷ։ൃͷਐΊํ
    で
    ͢ɻ
    ド
    ϝΠϯۦಈઃܭ
    で
    ͷ։ൃํ๏͸ɺຊؙ
    で
    ͋Δෳࡶͳۀ຿ϧʔϧʹয఺Λ߹Θͤɺ

    ͔ͦ͜ΒੵΈ্
    げ
    ͯ޿
    げ
    ͍ͯ͘ΠϯΫϦϝϯλϧ ੵΈ্
    げ

    ͳΞ
    プ
    ϩʔν
    ɾυϝΠϯ஌ࣝΛಘ΍͍͢؀ڥʹ͢Δ
    ɾۀ຿ϧʔϧΛ͏·͘நग़͢Δ
    ɾνʔϜͰυϝΠϯͷ஌ࣝΛڞ༗͢Δ
    ɾݱ࣮ͷ੍໿ͷதͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚Δ
    վΊͯʮݴ༿ͷҙຯʯΛߟ͑Δ
    8'త
    8'త
    8'త
    8'త
    %%%త

    View Slide

  9. JSPG͞Μͷֆ
    ຊؙͰ͋Δۀ຿ϧʔϧ
    ֎ງ͔Β
    じ
    ͬ͘ΓͱຒΊͯ

    ຊؙΛམͱ͍ͯ͘͠
    ຊؙ
    で
    ͋Δෳࡶͳۀ຿ϧʔϧʹয఺Λ߹Θͤɺ

    ͔ͦ͜ΒੵΈ্
    げ
    ͯ޿
    げ
    ͍ͯ͘

    View Slide

  10. JSPG͞Μͷֆ
    ຊؙͰ͋Δۀ຿ϧʔϧ
    ֎ງ͔Β
    じ
    ͬ͘ΓͱຒΊͯ

    ຊؙΛམͱ͍ͯ͘͠
    8'త 8'త
    8'త 8'త

    View Slide

  11. JSPG͞Μͷֆ
    ຊؙͰ͋Δۀ຿ϧʔϧ
    ຊؙ
    で
    ͋Δෳࡶͳۀ຿ϧʔϧʹয఺Λ߹Θͤɺ

    ͔ͦ͜ΒੵΈ্
    げ
    ͯ޿
    げ
    ͍ͯ͘
    %%%త

    View Slide

  12. ຊؙͰ͋Δۀ຿ϧʔϧ
    ۀ຿ͷෳࡶ͞ΛऔΓѻ͏ʹ͸Ϟσϧ͕ඞཁ
    ஌ࣝͷ੔ཧɺΑΓ෼͚ɺ·ͨίϛϡχέʔγϣϯΛ͢ΔͨΊʹϞσϧΛ࡞Δ
    ࡞ͬͨϞσϧ͸ઃܭͷࠎ֨ͱͳΔ
    ֎෦ઃܭ಺෦ઃܭ͕ैདྷͷ΍Γํʢೖྗɾग़ྗΛܾΊΔʣ
    ֓೦Λ·ͱΊΔͱ͍͏ߟ͑ํ͕͋·Γॏཁࢹ͞Ε͍ͯͳ͔ͬͨ
    %%%తͳ΍Γ͔ͨͩͱ಺෦ઃܭͷॏཁͳ෦෼͔Β֎෦ઃܭʹͳΔͱ͍͏΍Γํ

    ʢۀ຿ϩδοΫͷͨΊͷೖग़ྗʣ
    %%%͸ෳࡶͳυϝΠϯʢࣄۀ׆ಈʢϧʔϧ΍ϓϩηεΠϕϯτʣʣʹয఺Λ߹Θ͍ͤͯΔ
    ۀ຿஌ࣝ͸ͱͯ΋޿͍͕͋Γͱ͋ΒΏΔ΋ͷΛೖΕΔͱ͍͏ΑΓϞσϧ͸ਂ͞Λॏࢹ͍ͯ͠Δʢجຊɺத৺ɺநग़ʣ
    %%%ͷՁ஋
    اۀͷෳࡶͳࣄۀϞσϧΛ൓ө͠ਐԽΛଓ͚ΒΕΔγεςϜΛ࡞Δ
    ৄࡉΛ໢ཏʢ຋༁ήʔϜʣͯ͠͠·͏ͱɺॏཁͳཁ఺΍ཁ໿͕ຒ΋Εͯ͠·͏
    υϝΠϯۦಈઃܭΛߦ͏͜ͱͰൃలੑʹର͢Δεϐʔυ΍඼࣭͕มΘͬͯ͘Δ
    ൃలੑͱ͍͏ߟ͑ํʹγϑτͰ͖ͨ࣌ʹυϝΠϯۦಈઃܭͷՁ஋ʹؾ͚ͮΔ
    ಈ͘΋ͷΛεέδϡʔϧͷൣғͰ࡞Βͳ͍ͱ͍͚ͳ͍ͷͰൃలੑΛॏࢹ͢Δํ޲΁γϑτ͢Δͷ͸େ͖ͳνϟϨϯδʹͳΔ
    Α͋͘Δࣦഊ͸ৄࡉΛ໢ཏ͢ΔΑ͏ͳߟ͑ํͷ··υΩϡϝϯτΛݮΒ͢͜ͱʹϑΥʔΧε͕͋ͨͬͯ͠·͏
    υΩϡϝϯτΛॻ͘͜ͱ͕কདྷͷൃలੑʹد༩͢ΔͷͰ͋Ε͹ॻ͘ํ͕͍͍
    ൃలੑΛॏࢹ͢Δ৔߹ͱҰׅͰ࡞Δ৔߹͸൑அ͕ҟͳͬͯ͠·͏
    ϛʔςΟϯά ૿ాʁ
    ޠ࿥
    ཁ఺ɾཁૉ͚ͩͰͳ͘ɺίΞͷؔ܎ͱํ޲Λ߹Θ͍ͤͯ͘
    ͱೝ͕ࣝ͋ͬͯ͘Δ
    ཁ఺ɾཁૉͷೝࣝ͸߹͍ͬͯΔͷʹ൑அ͕ҟͳΔ৔߹͸ɺ
    ίΞͷؔ܎ੑͱํ޲ੑͷೝ͕ࣝͣΕ͍ͯΔ͜ͱ͕ଟ͍
    ΞϓϦέʔγϣϯͷ੒௕ʢʹਐ௙ʣʹରͯ͠Ϟσϧͷ੒௕͸ζϨ͕ੜ͡Δ
    υϝΠϯϞσϧͷ੒௕͸ઢܗͰ͸ͳ͍
    Ϟσϧ͕੒௕ΛͲ͏൑அ͢Δ͔ɻ
    ੒௕͍ͯ͠Δͱࢥ͍ͬͯͨΒෛ࠴͕ཷ·͍͚ͬͯͨͩͱ͍͏͜ͱ΋͋ͬͨ

    View Slide

  13. ͭͷࢹ఺
    ։ൃϓϩηεͱ͍͍ͭͭਓ΍ސ٬ͷέʔεελσΟ
    ɹྫʣ0OF)PQઌͷސ٬
    ɾυϝΠϯ஌ࣝΛಘ΍͍͢؀ڥʹ͢Δ
    ɾۀ຿ϧʔϧΛ͏·͘நग़͢Δ
    ɾνʔϜͰυϝΠϯͷ஌ࣝΛڞ༗͢Δ
    ɾݱ࣮ͷ੍໿ͷதͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚Δ
    ࣄྫͰɹɹɹɹɹɹɹͷΛॻ͖ग़͠ɺ
    ੔ཧ͠ɺ·ͱΊͨதͰ

    ͭͷʮͰ͖Δ͔Ͳ͏͔ʯ͕ҧ͍ͱͯ͠ݟ͑ͨ
    ɾυϝΠϯ஌ࣝΛಘΔ͜ͱ͕Ͱ͖Δ͔Ͳ͏͔
    ɾۀ຿ϧʔϧநग़͕Ͱ͖Δ͔Ͳ͏͔
    ɾνʔϜͰυϝΠϯΛڞ༗Ͱ͖Δ͔Ͳ͏͔
    ɾݱ࣮ͱͷڱؒͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚ΒΕΔ͔Ͳ͏͔
    ͏·͍ͬͨ͘͜ͱɺ

    ͍͔ͳ͔ͬͨ͜ͱ
    هࣄͰ͸
    ˰
    ࣄྫ঺հͰੜʑ͠͞Λ

    View Slide

  14. ͭͷࢹ఺
    ։ൃϓϩηεͱ͍͍ͭͭਓ΍ސ٬ͷέʔεελσΟ
    ɹྫʣ0OF)PQઌͷސ٬
    ɾυϝΠϯ஌ࣝΛಘ΍͍͢؀ڥʹ͢Δ
    ɾۀ຿ϧʔϧΛ͏·͘நग़͢Δ
    ɾνʔϜͰυϝΠϯͷ஌ࣝΛڞ༗͢Δ
    ɾݱ࣮ͷ੍໿ͷதͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚Δ
    ࣄྫͰɹɹɹɹɹɹɹͷΛॻ͖ग़͠ɺ
    ੔ཧ͠ɺ·ͱΊͨதͰ

    ͭͷʮͰ͖Δ͔Ͳ͏͔ʯ͕ҧ͍ͱͯ͠ݟ͑ͨ
    ɾυϝΠϯ஌ࣝΛಘΔ͜ͱ͕Ͱ͖Δ͔Ͳ͏͔
    ɾۀ຿ϧʔϧநग़͕Ͱ͖Δ͔Ͳ͏͔
    ɾνʔϜͰυϝΠϯΛڞ༗Ͱ͖Δ͔Ͳ͏͔
    ɾݱ࣮ͱͷڱؒͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚ΒΕΔ͔Ͳ͏͔
    ͏·͍ͬͨ͘͜ͱɺ

    ͍͔ͳ͔ͬͨ͜ͱ
    هࣄͰ͸
    ˰
    ཧ૝
    ࣄྫ঺հͰੜʑ͠͞Λ
    Λ௥͍ٻΊͳ͚Ε͹ɺ

    ଥڠͷ຤ʹखʹೖΕΔ΋ͷ͸খ͘͞ͳΔ

    View Slide

  15. ʮݴ༿ͷҙຯʯΛߟ͑Δ
    ݴ༿͕ग़͖ͯͨ࣌ʹ
    ຊདྷͷҙຯʹ͋ͨΔͱ͍͏͜ͱ͸΍ͬͯ΄͍͠
    ϢϏΩλεݴޠ͸ؔ܎ੑΛॏࢹ͍ͯ͠Δͱ͜Ζ͕༻ޠूͱҟͳΔ
    ༻ޠͱͯ͠ѻ͏΋ͷ͸ɺυϝΠϯۦಈઃܭͷදࢴͱཪදࢴɻ
    ͜͜ͷද͕ɺग़ͯ͘Δ༻ޠͷؔ܎ΛϞσϧͱͯ͠දݱ͍ͯ͠Δɻ
    த֩ͷ֓೦ɻ
    ͳͷͰɺ͜ͷத֩ͷ֓೦ΛվΊͯ༻ޠूͱͯ͠·ͱΊ͍ͯ͘͜ͱʹՁ஋͕͋Δɻ
    ݴ༿ͷҧ࿨ײΛײ͡औΕΔͱ͍͏ͷ͸ਓ͕͍ؒ࣋ͬͯΔࣗવݴޠΛ࢖ͬͨૉ੖Β͍͠ೳྗ
    ҧ࿨ײΛײͯ͡΋ݱ࣮͸ҧ࿨ײΛ࣋ͬͨ··ଗ͑ͣʹࡁ·ͯ͠͠·͏͜ͱͷํ͕ଟ͍
    ൑அ͕ҟͳΔ৔߹͸ɺҧ͏ݴ༿Λಉ͡จ຺Ͱ࢖͍ͬͯΔɺಉ͡ݴ༿Λҧ͏จ຺Ͱ࢖͍ͬͯΔɺಉ͡ݴ༿Λಉ͡จ຺Ͱ࢖͍ͬͯΔͱ͍͏ͭͷύλʔϯ͕͋Δ
    ҧ͏ݴ༿Λಉ͡จ຺Ͱ࢖͍ͬͯΔɺಉ͡ݴ༿Λҧ͏จ຺Ͱ࢖͍ͬͯΔͱձ࿩͕੒Γཱͨͳ͍
    طଘͷγεςϜ͸طଘͷγεςϜͰݴޠମܥ͕ग़དྷ্͕͍ͬͯΔ
    ݴ༿΍ݴ༿ͷղऍ͕Ұக͍ͯ͠Δͷʹ൑அ͕ҟͳΔ৔߹΋͋Δ͚ΕͲɺจ຺ʢ໨త΍੍໿৚݅ʹલఏ৚݅ʣͷೝ͕ࣝҟͳΔ৔߹͕΄ͱΜͲ
    จ຺͕ҟͳ͍ͬͯΔͱ͍͏ͱ͜Ζ·Ͱίϛϡχέʔγϣϯ͕औΕΔͱ͍͍
    ϛʔςΟϯά ૿ాʁ
    ޠ࿥

    View Slide

  16. هࣄΛॻ͘ͱ͍͏ܦݧͷதͰɺ
    ޮ཰తͳ࢓ࣄͷਐΊํΛվΊͯײ͡Δ
    Ξ΢τϓοτͷେ੾͞ΛվΊͯײ͡Δ
    ɾഎܠΛ஌͍ͬͯΔϝϯόʔ
    ɾ·ͣ͸࠷ॳʹʮ΍Δ͜ͱʯΛڞ༗͠ɺߟ͑ΛΈΜͳͰσΟεΧογϣϯ͢Δ
    ɾੜΈग़ͨ͢Ίʹɺॻ͖࿈ͶΔ
    ɾॻ͖࿈Ͷͨ΋ͷΛ੔ཧ͢Δ
    ɾਪᏏ͢Δ
    ɾ;Γ͔͑ΔதͰɺࣗ෼͕๨Ε͍ͯͨ͜ͱΛࢥ͍ग़ͤΔ
    ɾܗ࡞ΔதͰɺࣗ෼ͷதͷݴ༿ͱͯ͠ݻఆԽ͞Ε͍ͯ͘
    ɾ܁Γฦ͍ͯ͠Δ૿ా͞Μ͔Β͸ɺઆಘྗͷ͋Δ͍͍ݴ༿΍આ໌͕ͨ͘͞Μग़ͯ͘Δ
    ˰ʮݴ༿ʯʹͩ͜Θͬͯ·ͱΊΔྗ
    ˰υϝΠϯΛଊ͑Δ
    ʹܨ͕Δ
    ʹܨ͕Δ

    View Slide

  17. ׬

    View Slide