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

設計に「こだわる」とは / Sekkei-ni-kodawaru

設計に「こだわる」とは / Sekkei-ni-kodawaru

BPStudy#151〜オブジェクト指向、モデリング、設計 LT大会[リモート開催]
https://bpstudy.connpass.com/event/170610/
にてお話した際のプレゼン資料です。

株式会社アクティアは、「モデル駆動開発でソフトウェア開発を効率化しよう!」 をキーワードにモデリングを活用したソフトウェア開発を実現させようという企業です。
そんなモデリングを活用することに主眼を置いている中で、アクティアでは設計に「こだわる」という文化が生まれています。
あらためて、設計に「こだわる」ということを考えた時に、経験値と感覚でやっている所が多い状況でした。この発表を機会に、自分自身がやっていることを言語化してみようと思います。

#設計こだわる #モデル駆動型開発 #ドメイン駆動設計 #DDD #ユビキタス言語 #RDRA #モデリング #匠Method #BPStudy

KentaroTakasaki

March 30, 2020
Tweet

More Decks by KentaroTakasaki

Other Decks in Programming

Transcript

  1. %3:ݪଇ ΞʔΩςΫνϟύλʔϯ 40-*%ݪଇ ίʔσΟϯάن໿ σβΠϯύλʔϯ ୯Ұ੹೚ݪଇ ɾɾɾ Ϧʔμϒϧίʔυ ʲઃܭͰॏཁͦ͏ͳ࿩ʳ ΦʔϓϯΫϩʔευͷݪଇ

    Ϧείϑͷஔ׵ݪଇ ΠϯλʔϑΣʔε෼཭ͷݪଇ ґଘੑٯసͷݪଇ :"(/*ݪଇ ,*44ͷݪଇ ͜ΕΒͷݪཧɾݪଇ͸ ͕ͩɺ ͍Δͷ͔ʁ ͩ͜Θͬͯ େࣄ
  2. Ձ஋ ཁٻ ෼ੳ ઃܭ ࣮૷ ςετ Ϟσϧۦಈܕ։ൃ υϝΠϯۦಈઃܭ 3%3" ϦϨʔγϣϯγοϓۦಈཁ݅෼ੳ

    ߴ࡚ͷઃܭ΍ϞσϦϯάͱͷؔΘΓ ઃܭɺ ࣮૷΁ ʲͭͷͩ͜ΘΓʳ എܠ΍શମ૾Λଊ͑Δ εςʔΫϗϧμͱͷ ೝࣝڞ༗ γεςϜͷকདྷΛߟ͑Δ
  3. A c t i e r A c t i

    e r גࣜձࣾΞΫςΟΞ ॴࡏ஍ɹɹɹɿɹ౦ژ౎தԝ۠೔ຊڮງཹொ ઃཱɹɹɹɹɿɹ೥ɹ݄  ϗʔϜϖʔδɿɹIUUQXXXBDUJFSDPKQ ैۀһ਺ɹɹɿɹ໊ʢऔక໾ ܖ໿ࣾһؚΉʣ ΍ͬͯΔ͜ͱɿɹϞσϧۦಈܕ։ൃͳͲΛ׆༻ͨ͠ ઃܭʹͩ͜Θͬͨιϑτ΢ΣΞ։ൃ
  4. ʲʢϞσϧۦಈ։ൃʣϞσϦϯάʹͩ͜ΘΔʳ ސ٬ ސ٬*% ސ٬໊ ஫จ ஫จ*% ஫จ೔ ܾࡋ ΫϨδοτΧʔυ ݱۚ

    ͋Δ෺ମ΍ࣄ৅ʹ͍ͭͯண໨͍ͯ͠Δಛ௃΍ɺಉछͷෳ਺ͷର৅ʹڞ௨͢Δੑ࣭Λநग़͠ɺ ࠣ຤ͳࡉ෦Λ؆ུԽͨ͠ந৅తͳ໛ܕʢϞσϧʣΛ࡞੒͢Δ͜ͱɹʢF8PSETΑΓʣ Ϋϥεਤ ϞσϧΛ࡞Δ͜ͱͰ ઃܭ಺༰Λ ෼͔Γ΍͘͢͢Δ
  5. ʲઃܭ͔Β࣮૷΁ʳ /** * ঎඼(ࢴ) */ package jp.xx.xxx.xxx.domain.model.item.paper /** ঎඼ʢࢴʣ */

    listType PaperItems<PaperItem> /** ࢴ঎඼ϦϏδϣϯ */ longType Revision /** ࢴ঎඼ */ object PaperItem { ItemCode itemCode ChartType chartType {required} ItemDescription itemDescription Revision revision Publication publication SalesUnitPrice salesUnitPrice StockControl stockControl def ItemCode itemCode(){ return itemCode } def SalesUnitPrice salesUnitPrice() { salesUnitPrice } %4- ύοέʔδߏ੒΍ιʔε ϘΠϥʔςϯϓϨʔτͳ ίʔυΛҙࣝͤͣʹࡁΉ ʢίϐϖΛແ͘͠ਓతϛεΛݮΒ͢ʣ  Α͋͘Δࣗಈੜ੒ܥͱͷࠩผԽͱͯ͠ Մಡੑͷ͋Διʔεʹ߆Δ ϞσϦϯάͱͯ͠ ਓ͕஫ྗ͢΂͖ͱ͜ΖΛ ઃܭ ͢Δ ࣗಈੜ੒
  6.  ͋ͳ͕ͨઃܭΛ͢Δࡍʹʲಛʹʳʮͩ͜ΘΔʯཁૉΛҎԼ͔ΒબΜͰ͍ͩ͘͞ɻ ʢෳ਺Մ͕ͩ̏ͭ·Ͱʣ  ͋ͳ্͕ͨهͰબ୒ͨ͠ʮͩ͜ΘΔʯཁૉʹͩ͜Θ͍ͬͯΔͷ͸ԿނͰ͔͢ʁ ཧ༝Λهࡌ͍ͯͩ͘͠͞ɻ ·ͨɺ্هͷதʹʮͩ͜ΘΔʯཁૉ͕଍Γͳ͔ͬͨ৔߹͸ɺ͜ͷճ౴Ͱ෇͚଍͠ ͍ͯͩ͘͞ɻ  ͋ͳͨʹͱͬͯɺઃܭʹʮͩ͜ΘΔʯͱ͍͏͜ͱΛҰݴͰද͢ͱ

    ʲઃܭͩ͜ΘΓϙΠϯτΞϯέʔτʳ ɾґଘੑΛແ͘͢ ɾ6*69 ɾཁٻ΍ཁ݅ͱͷτϨʔαϏϦςΟ ɾςετͷ͠΍͢͞ ɾόάͷग़ʹ͘͞ ɾઃܭͷฏ४Խ ɾϏδωεతͳഎܠΛଊ͑Δ ɾ෦෼Ͱ͸ͳ͘શମ૾Λଊ͑Δ ɾϗϫΠτϘʔυͳͲʹਤΛॻ͍ͯڞ༗ ɾυΩϡϝϯτԽ ɾύλʔϯͷద༻ ɾݴ༿ ɾίϯϙʔωϯτ෼ׂ ɾύοέʔδͳͲͷߏ଄ ɾεςʔΫϗϧμͱཧղͷڞ༗ ɾγεςϜͷকདྷ૾Λߟ͑Δ ɾอकɾӡ༻ͷ͠΍͢͞ ɾૉૣ͍࣮૷ίʔυԽ ɾΠϯλϑΣʔεͷఆٛ ɾύϑΥʔϚϯε
  7.  ͋ͳ͕ͨઃܭΛ͢Δࡍʹʲಛʹʳʮͩ͜ΘΔʯཁૉΛҎԼ͔ΒબΜͰ͍ͩ͘͞ɻ ʢෳ਺Մ͕ͩ̏ͭ·Ͱʣ  ͋ͳ্͕ͨهͰબ୒ͨ͠ʮͩ͜ΘΔʯཁૉʹͩ͜Θ͍ͬͯΔͷ͸ԿނͰ͔͢ʁ ཧ༝Λهࡌ͍ͯͩ͘͠͞ɻ ·ͨɺ্هͷதʹʮͩ͜ΘΔʯཁૉ͕଍Γͳ͔ͬͨ৔߹͸ɺ͜ͷճ౴Ͱ෇͚଍͠ ͍ͯͩ͘͞ɻ  ͋ͳͨʹͱͬͯɺઃܭʹʮͩ͜ΘΔʯͱ͍͏͜ͱΛҰݴͰද͢ͱ

    ʲઃܭͩ͜ΘΓϙΠϯτΞϯέʔτʳ ɾґଘੑΛແ͘͢ ɾ6*69 ɾཁٻ΍ཁ݅ͱͷτϨʔαϏϦςΟ ɾςετͷ͠΍͢͞ ɾόάͷग़ʹ͘͞ ɾઃܭͷฏ४Խ ɾϏδωεతͳഎܠΛଊ͑Δ ɾ෦෼Ͱ͸ͳ͘શମ૾Λଊ͑Δ ɾϗϫΠτϘʔυͳͲʹਤΛॻ͍ͯڞ༗ ɾυΩϡϝϯτԽ ɾύλʔϯͷద༻ ɾݴ༿ ɾίϯϙʔωϯτ෼ׂ ɾύοέʔδͳͲͷߏ଄ ɾεςʔΫϗϧμͱཧղͷڞ༗ ɾγεςϜͷকདྷ૾Λߟ͑Δ ɾอकɾӡ༻ͷ͠΍͢͞ ɾૉૣ͍࣮૷ίʔυԽ ɾΠϯλϑΣʔεͷఆٛ ɾύϑΥʔϚϯε ઃܭͷதͰͷݪཧɾݪଇ΍ ͦͷલ޻ఔ΍ޙ޻ఔΛ౿·༷͑ͨͳ બ୒ཁૉΛ۩ମతʹͳΓ͗͢ͳ͍༷ͳ ߲໨ͱͯ͠ϐοΫΞοϓ
  8. ʲͦ΋ͦ΋ઃܭͬͯʁʳ ཁ݅ఆٛ جຊઃܭ ࣮૷ ୯ମςετ ৄࡉઃܭ ݁߹ςετ γεςϜ ςετ डೖςετ

    ϋʔυ΢ΣΞߏ੒඼໨ɺιϑτ΢ΣΞߏ੒඼໨ٴͼख࡞ۀΛ໌֬ʹ͠ɺγεςϜํࣜٴͼ֤඼໨ʹׂΓৼͬͨγεςϜཁ݅ΛจॻԽ͢Δɻ ·ͨɺιϑτ΢ΣΞ඼໨ʹର͢Δཁ݅Λιϑτ΢ΣΞํࣜʹม׵͢Δɻ࠷্ҐϨϕϧͷߏ଄ͱιϑτ΢ΣΞίϯϙʔωϯτΛ໌Β͔ʹ͠ɺ σʔλϕʔεͷ࠷্ҐϨϕϧͰͷઃܭɺར༻ऀจॻͷ࢑ఆ൛ͷ࡞੒ɺιϑτ΢ΣΞ݁߹ͷͨΊͷ࢑ఆతͳςετཁٻࣄ߲ٴͼ༧ఆ౳Λ໌Β͔ʹ͢Δɻ ํࣜઃܭͷධՁͱڞಉϨϏϡʔΛ࣮ࢪ͢Δɻ جຊઃܭ ˞4-$1ͷఆٛΑΓ γεςϜํࣜઃܭɾιϑτ΢ΣΞํࣜઃܭ
  9. ʲͦ΋ͦ΋ઃܭͬͯʁʳ ཁ݅ఆٛ جຊઃܭ ࣮૷ ୯ମςετ ৄࡉઃܭ ݁߹ςετ γεςϜ ςετ डೖςετ

    ιϑτ΢ΣΞ඼໨ͷ֤ιϑτ΢ΣΞίϯϙʔωϯτʹରͯ͠ৄࡉઃܭΛߦ͏ɻ ιϑτ΢ΣΞίϯϙʔωϯτ͸ɺίʔσΟϯάɺίϯύΠϧٴͼςετΛ࣮ࢪ͢ΔϢχοτϨϕϧʹৄࡉԽ͢Δɻ ·ͨɺιϑτ΢ΣΞΠϯλʔϑΣΠεɺσʔλϕʔεͷৄࡉઃܭɺඞཁʹԠͯ͡ར༻ऀจॻΛߋ৽ɺϢχοτςετɺ݁߹ςετͷͨΊͷςετཁٻ ࣄ߲ٴͼ༧ఆΛఆٛ͢ΔɻධՁٴͼڞಉϨϏϡʔΛ࣮ࢪ͢Δɻ ৄࡉઃܭ ˞4-$1ͷఆٛΑΓ ιϑτ΢ΣΞৄࡉઃܭ
  10. ιϑτ΢ΣΞ γεςϜ ۀ຿ ʲͦ΋ͦ΋ઃܭͬͯʁʳ ཁ݅ఆٛ جຊઃܭ ࣮૷ ୯ମςετ ৄࡉઃܭ ݁߹ςετ

    γεςϜ ςετ डೖςετ جຊઃܭͰɺΞʔΩςΫνϟͳͲํࣜΛݻΊɺ ৄࡉઃܭͰɺࡉ͔͘ιϑτ΢ΣΞ΁ͷམͱ͠ࠐΈ ΛݻΊ͍ͯ͘
  11. ʲઃܭͷ஌ࣝྖҬʳ ཁ݅ఆٛ جຊઃܭ ࣮૷ ୯ମςετ ৄࡉઃܭ ݁߹ςετ γεςϜ ςετ डೖςετ

    ઃܭͷجૅ ˞48&#0,7ΑΓ ઃܭͷओཁ໰୊ ߏ଄ͱΞʔΩςΫνϟ ϢʔβΠϯλϑΣʔεઃܭ ઃܭ඼࣭ͷ෼ੳධՁ ઃܭͷදه ઃܭઓུɾख๏ ઃܭπʔϧ
  12. ιϑτ΢ΣΞ γεςϜ ۀ຿ ʲઃܭͷϕʔε͸ʳ ཁ݅ఆٛ جຊઃܭ ࣮૷ ୯ମςετ ৄࡉઃܭ ݁߹ςετ

    γεςϜ ςετ डೖςετ ৄࡉઃܭͷϕʔε͸ɺجຊઃܭɻ جຊઃܭͷϕʔε͸ɺཁ݅ఆٛʢ࢓༷ʣɻ
  13. ιϑτ΢ΣΞ γεςϜ ۀ຿ ʲ͢΂ͯ͸ɺϏδωε͔Βʳ ཁ݅ఆٛ جຊઃܭ ࣮૷ ୯ମςετ ৄࡉઃܭ ݁߹ςετ

    γεςϜ ςετ डೖςετ ཁٻɺཁ݅ɺཁ๬ɺ͢΂ͯ͸Ϗδωε͔Βग़ͯ͘Δ اըɾܭը ධՁ Ϗδωε
  14. ʲϏδωεͷഎܠ΍શମ૾Λଊ͑ͨઃܭʳ Ϗδωε υϝΠϯ ιϑτ΢ΣΞ ʢιʔείʔυʣ Ϟσϧ ʢઃܭʣ υϝΠϯ ΤΩεύʔτ ։ൃऀ

    എܠΛଊ͑Δ ػೳΛද໘తͰ͸ͳ͘ ਅʹඞཁͳ΋ͷΛଊ͑ͯ ઃܭͰ͖ίʔυ΁ͱܨ͕Δ Ϗδωε͔Β࢓༷Λଊ͑ɺઃܭͯ͠ܨ͙
  15. ʲϏδωεɺγεςϜͷؔ܎ऀʳ Ϗδωε υϝΠϯ ιϑτ΢ΣΞ ʢιʔείʔυʣ Ϟσϧ ʢઃܭʣ υϝΠϯ ΤΩεύʔτ ։ൃऀ

    Ϗδωε͔Β࢓༷Λଊ͑ɺઃܭͯ͠ܨ͙ Ϗδωε͔Β࢓༷Λଊ͑ͯɺ γεςϜΛઃܭͯ͠࡞͍ͬͯ͘ࡍʹ͸ ଟ͘ͷؔ܎ऀʢεςʔΫϗϧμʣ͕ؔΘΔɻ εςʔΫϗϧμ͸ɺօಉ͡ߟ͑ํʹͳΔ͔ʁ εςʔΫϗϧμ
  16. ʲεςʔΫϗϧμؒͰͷݴ༿ ໊લ ͷဃ཭ʳ Ϗδωε υϝΠϯ ιϑτ΢ΣΞ ʢιʔείʔυʣ Ϟσϧ υϝΠϯΤΩεύʔτ͸ɺ ιϑτ΢ΣΞ։ൃʹ͓͚Δٕज़తͳઐ໳༻ޠͷ͜ͱ͸෦෼తʹ͔͠ཧղͤͣɺ

    ୅ΘΓʹࣗ෼ͷಘҙ෼໺ͷઐ໳༻ޠΛ࢖༻͢Δ υϝΠϯ ΤΩεύʔτ ։ൃऀ͸ɺ γεςϜΛཧղͯٞ͠࿦͢Δࡍʹɺػೳʹؔ͢Δઆ໌తͳ༻ޠΛ༻͍Δ͔΋͠ Εͳ͍͕ɺ͜͏ͨ͠༻ޠ͸υϝΠϯΤΩεύʔτͷݴޠ͕͍࣋ͬͯͨҙຯΛܽ ͍ͯ͠·͍ͬͯΔɻ͋Δ͍͸ɺ։ൃऀʹΑΔந৅Խ͸ɺࣗ෼ͨͪͷઃܭΛࢧ͑ ͯ͸͍ͯ΋ɺυϝΠϯΤΩεύʔτʹ͸ཧղ͞Εͳ͍͔΋͠Εͳ͍ ։ൃऀ ݴ༿ ໊લ ͷؒʹ͸ʲஅઈʳ͕͋Δ
  17. ʲϢϏΩλεݴޠʳ Ϗδωε υϝΠϯ ιϑτ΢ΣΞ ʢιʔείʔυʣ Ϟσϧ υϝΠϯ ΤΩεύʔτ ։ൃऀ ϞσϧΛݴޠͷࠎ֨ͱ͢Δ

    ͢΂ͯͷίϛϡχέʔγϣϯͱίʔυʹɺͦͷݴޠΛ ݫ֨ʹ༻͍Δ  ݴޠʹ໰୊͕͋Ε͹୅ΘΓͱͳΔݴ༿Λ୳͠ɺϞσϧ Λ৽ͯ͘͠͠ίʔυΛϦϑΝΫλϦϯά͢Δ ݴޠʢݴ༿ʣ Ұ؏ͨ͠ݴޠʢݴ༿ʣͰڞ༗
  18. ɾ੒ޭγφϦΦΛඳ͘͜ͱ ʲઃܭʹͩ͜ΘΔΛҰݴͰΞϯέʔτʳ ɾՄಡੑ ɾΑΓΘ͔Γ΍͘͢γϯϓϧʹίʔυΛॻ͘ ɾεςʔΫεϗϧμʔͱͷίϛϡχέʔγϣϯ ɾϢʔβͷίετ ֶशίετ ར༻ίετ ΛΑΓԼ͛ɺԸܙΛΑΓ্͛Δɻ ɾ੔ཧ੔಴

    ɾೲಘͰ͖ΔΑ͏ʹ͢Δ ɾؔ܎͢Δશͯͷਓʑ ൃ஫ଆͷ͓٬༷΍εςʔΫεϗϧμʔɺར༻ऀͱͳΔ ɹϢʔβ༷ɺͦͯ͠࡞Δզʑ ͕Ұ൪޾ͤʹͳΕΔԿ͔Λ໛ࡧ͢Δ͜ͱ ɾ༏ઌॱҐΛߴ͘͢Δ ɾৗʹߟ͑Δ͜ͱ
  19. ׬