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

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

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

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. ֶ

  2. ͍Ζ͍ΖͳܦݧΛ·ͱΊΔதͰɺ ຊؙͰ͋Δۀ຿ϧʔϧʹয఺Λ߹Θ͢ ܦݧ͍ͯͨͭ͠ͷࢹ఺ ΢ΥʔλʔϑΥʔϧతͳ΍Γํ͸ɺ্ྲྀ޻ఔ͔ΒԼྲྀ޻ఔ΁ஈ֊తʹཁ݅ఆٛˠ֎෦ઃܭˠ಺෦ઃܭͱਐΜ で ͍͖·͢ɻ 
 Ξ プ ϦέʔγϣϯશମΛ֎ଆ͔Βఆ͍͖ٛͯ͠ɺ࠷ޙͷ࣮૷࡞ۀΛߦ͏΍Γํ

    で ͢ɻ 
 ʮ֎ງ͔Β じ ͬ͘ΓͱຒΊͯຊؙΛམͱ͍ͯ͘͠ʯͱ͍ͬͨελΠϧͷ։ൃͷਐΊํ で ͢ɻ ド ϝΠϯۦಈઃܭ で ͷ։ൃํ๏͸ɺຊؙ で ͋Δෳࡶͳۀ຿ϧʔϧʹয఺Λ߹Θͤɺ 
 ͔ͦ͜ΒੵΈ্ げ ͯ޿ げ ͍ͯ͘ΠϯΫϦϝϯλϧ ੵΈ্ げ ࣜ ͳΞ プ ϩʔν ɾυϝΠϯ஌ࣝΛಘ΍͍͢؀ڥʹ͢Δ ɾۀ຿ϧʔϧΛ͏·͘நग़͢Δ ɾνʔϜͰυϝΠϯͷ஌ࣝΛڞ༗͢Δ ɾݱ࣮ͷ੍໿ͷதͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚Δ վΊͯʮݴ༿ͷҙຯʯΛߟ͑Δ 8'త 8'త 8'త 8'త %%%త
  3. ຊؙͰ͋Δۀ຿ϧʔϧ ۀ຿ͷෳࡶ͞ΛऔΓѻ͏ʹ͸Ϟσϧ͕ඞཁ ஌ࣝͷ੔ཧɺΑΓ෼͚ɺ·ͨίϛϡχέʔγϣϯΛ͢ΔͨΊʹϞσϧΛ࡞Δ ࡞ͬͨϞσϧ͸ઃܭͷࠎ֨ͱͳΔ ֎෦ઃܭ಺෦ઃܭ͕ैདྷͷ΍Γํʢೖྗɾग़ྗΛܾΊΔʣ ֓೦Λ·ͱΊΔͱ͍͏ߟ͑ํ͕͋·Γॏཁࢹ͞Ε͍ͯͳ͔ͬͨ %%%తͳ΍Γ͔ͨͩͱ಺෦ઃܭͷॏཁͳ෦෼͔Β֎෦ઃܭʹͳΔͱ͍͏΍Γํ 
 ʢۀ຿ϩδοΫͷͨΊͷೖग़ྗʣ %%%͸ෳࡶͳυϝΠϯʢࣄۀ׆ಈʢϧʔϧ΍ϓϩηεΠϕϯτʣʣʹয఺Λ߹Θ͍ͤͯΔ

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


    ͭͷʮͰ͖Δ͔Ͳ͏͔ʯ͕ҧ͍ͱͯ͠ݟ͑ͨ ɾυϝΠϯ஌ࣝΛಘΔ͜ͱ͕Ͱ͖Δ͔Ͳ͏͔ ɾۀ຿ϧʔϧநग़͕Ͱ͖Δ͔Ͳ͏͔ ɾνʔϜͰυϝΠϯΛڞ༗Ͱ͖Δ͔Ͳ͏͔ ɾݱ࣮ͱͷڱؒͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚ΒΕΔ͔Ͳ͏͔ ͏·͍ͬͨ͘͜ͱɺ 
 ͍͔ͳ͔ͬͨ͜ͱ هࣄͰ͸ ˰ ࣄྫ঺հͰੜʑ͠͞Λ
  5. ͭͷࢹ఺ ։ൃϓϩηεͱ͍͍ͭͭਓ΍ސ٬ͷέʔεελσΟ ɹྫʣ0OF)PQઌͷސ٬ ɾυϝΠϯ஌ࣝΛಘ΍͍͢؀ڥʹ͢Δ ɾۀ຿ϧʔϧΛ͏·͘நग़͢Δ ɾνʔϜͰυϝΠϯͷ஌ࣝΛڞ༗͢Δ ɾݱ࣮ͷ੍໿ͷதͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚Δ ࣄྫͰɹɹɹɹɹɹɹͷΛॻ͖ग़͠ɺ ੔ཧ͠ɺ·ͱΊͨதͰ 


    ͭͷʮͰ͖Δ͔Ͳ͏͔ʯ͕ҧ͍ͱͯ͠ݟ͑ͨ ɾυϝΠϯ஌ࣝΛಘΔ͜ͱ͕Ͱ͖Δ͔Ͳ͏͔ ɾۀ຿ϧʔϧநग़͕Ͱ͖Δ͔Ͳ͏͔ ɾνʔϜͰυϝΠϯΛڞ༗Ͱ͖Δ͔Ͳ͏͔ ɾݱ࣮ͱͷڱؒͰυϝΠϯۦಈઃܭΛద༻͠ଓ͚ΒΕΔ͔Ͳ͏͔ ͏·͍ͬͨ͘͜ͱɺ 
 ͍͔ͳ͔ͬͨ͜ͱ هࣄͰ͸ ˰ ཧ૝ ࣄྫ঺հͰੜʑ͠͞Λ Λ௥͍ٻΊͳ͚Ε͹ɺ 
 ଥڠͷ຤ʹखʹೖΕΔ΋ͷ͸খ͘͞ͳΔ
  6. ʮݴ༿ͷҙຯʯΛߟ͑Δ ݴ༿͕ग़͖ͯͨ࣌ʹ ຊདྷͷҙຯʹ͋ͨΔͱ͍͏͜ͱ͸΍ͬͯ΄͍͠ ϢϏΩλεݴޠ͸ؔ܎ੑΛॏࢹ͍ͯ͠Δͱ͜Ζ͕༻ޠूͱҟͳΔ ༻ޠͱͯ͠ѻ͏΋ͷ͸ɺυϝΠϯۦಈઃܭͷදࢴͱཪදࢴɻ ͜͜ͷද͕ɺग़ͯ͘Δ༻ޠͷؔ܎ΛϞσϧͱͯ͠දݱ͍ͯ͠Δɻ த֩ͷ֓೦ɻ ͳͷͰɺ͜ͷத֩ͷ֓೦ΛվΊͯ༻ޠूͱͯ͠·ͱΊ͍ͯ͘͜ͱʹՁ஋͕͋Δɻ ݴ༿ͷҧ࿨ײΛײ͡औΕΔͱ͍͏ͷ͸ਓ͕͍ؒ࣋ͬͯΔࣗવݴޠΛ࢖ͬͨૉ੖Β͍͠ೳྗ ҧ࿨ײΛײͯ͡΋ݱ࣮͸ҧ࿨ײΛ࣋ͬͨ··ଗ͑ͣʹࡁ·ͯ͠͠·͏͜ͱͷํ͕ଟ͍

    ൑அ͕ҟͳΔ৔߹͸ɺҧ͏ݴ༿Λಉ͡จ຺Ͱ࢖͍ͬͯΔɺಉ͡ݴ༿Λҧ͏จ຺Ͱ࢖͍ͬͯΔɺಉ͡ݴ༿Λಉ͡จ຺Ͱ࢖͍ͬͯΔͱ͍͏ͭͷύλʔϯ͕͋Δ ҧ͏ݴ༿Λಉ͡จ຺Ͱ࢖͍ͬͯΔɺಉ͡ݴ༿Λҧ͏จ຺Ͱ࢖͍ͬͯΔͱձ࿩͕੒Γཱͨͳ͍ طଘͷγεςϜ͸طଘͷγεςϜͰݴޠମܥ͕ग़དྷ্͕͍ͬͯΔ ݴ༿΍ݴ༿ͷղऍ͕Ұக͍ͯ͠Δͷʹ൑அ͕ҟͳΔ৔߹΋͋Δ͚ΕͲɺจ຺ʢ໨త΍੍໿৚݅ʹલఏ৚݅ʣͷೝ͕ࣝҟͳΔ৔߹͕΄ͱΜͲ จ຺͕ҟͳ͍ͬͯΔͱ͍͏ͱ͜Ζ·Ͱίϛϡχέʔγϣϯ͕औΕΔͱ͍͍ ϛʔςΟϯά ૿ాʁ ޠ࿥
  7. ׬