Skip to content

Instantly share code, notes, and snippets.

@ryu1
Last active September 26, 2024 07:41
Show Gist options
  • Save ryu1/cef516f482bb73b2a58f087954cb9de1 to your computer and use it in GitHub Desktop.
Save ryu1/cef516f482bb73b2a58f087954cb9de1 to your computer and use it in GitHub Desktop.

Layer

UIๅฑค

  • ใƒฆใƒผใ‚ถใจใฎ็›ธไบ’ไฝœ็”จใฎๅขƒ็•Œใจใชใ‚‹ๅฑค
  • ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅฑคใฎไธ€้ƒจใชใฎใ‹ๅˆฅๅ€‹ใฎใƒฌใ‚คใƒคใชใฎใ‹่ซธ่ชฌใ‚ใ‚Š
  • ใƒฆใƒผใ‚ถใƒผใซๆƒ…ๅ ฑใ‚’ๆ็คบใ—ใฆใ€ใƒฆใƒผใ‚ถใƒผใฎๆ“ไฝœใ‚„ใ‚ณใƒžใƒณใƒ‰ใฎ่งฃ้‡ˆใ‚’ๆ‹…ใ†ใƒฌใ‚คใƒคใƒผใ€‚ DDDใงใฏใ€ใ“ใฎใƒฌใ‚คใƒคใƒผใซใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏใ‚’็ต„ใ‚€่พผใ‚€ใ“ใจใ‚’็šฎ่‚‰ใ‚’่พผใ‚ใฆใ€ŒๅˆฉๅฃใชUIใ€ใจใ„ใ†ใ‚ขใƒณใƒใƒ‘ใ‚ฟใƒผใƒณใจใ—ใฆใŠใ‚Šใ€้ฟใ‘ใ‚‹ในใใƒ‘ใ‚ฟใƒผใƒณใงใ‚ใ‚‹ใ€‚

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅฑค

  • ใƒ‰ใƒกใ‚คใƒณใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆ“ไฝœใ™ใ‚‹ใ“ใจใงใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใŒๆžœใŸใ™ในใไป•ไบ‹ใ‚’ๅฎŸ็พใ™ใ‚‹ๅฑค
  • ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใŒ่กŒใ†ใ“ใจใซใชใฃใฆใ„ใ‚‹ไป•ไบ‹๏ผˆใƒฆใƒผใ‚นใ‚ฑใƒผใ‚น๏ผ‰ใ‚’ๅฎš็พฉใ—ใ€ใใฎไป•ไบ‹ใ‚’ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใŒ่งฃๆฑบใ™ใ‚‹ใ‚ˆใ†ใซๆŒ‡ๆฎ๏ผˆorchestrate๏ผ‰ใ™ใ‚‹ใƒฌใ‚คใƒคใƒผใ€‚ใ“ใฎใƒฌใ‚คใƒคใƒผใ‚‚ใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏใฏๅซใพใšใ€ๅฎŸ้š›ใฎๅ‡ฆ็†ใฏใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใซๅง”่ญฒใ—ใฆ่ชฟๆ•ดๅฝนใ‚’ๆ‹…ใ†ใ€‚

ใƒ‰ใƒกใ‚คใƒณๅฑค

  • ใƒ“ใ‚ธใƒใ‚นไธŠใฎๆฆ‚ๅฟตใ‚’่กจ็พใ™ใ‚‹ๅฑค
  • ใƒ“ใ‚ธใƒใ‚นใฎๆฆ‚ๅฟตใจใ€ใƒ“ใ‚ธใƒใ‚นใƒซใƒผใƒซใŠใ‚ˆใณใƒ“ใ‚ธใƒใ‚นใŒ็ฝฎใ‹ใ‚ŒใŸ็Šถๆณใซ้–ขใ™ใ‚‹ๆƒ…ๅ ฑใ‚’่กจ็พใ™ใ‚‹ใƒฌใ‚คใƒคใƒผใ€‚ใ“ใฎใƒฌใ‚คใƒคใƒผใŒใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎๆ ธๅฟƒใจใชใ‚‹ใƒฌใ‚คใƒคใƒผใงใ€ใƒขใƒ‡ใƒซใŒๆฏใฅใๅ ดๆ‰€ใงใ‚ใ‚‹ใ€‚ไฝ†ใ—ใ€ๆŠ€่ก“็š„ใช้–ขๅฟƒไบ‹ใซใคใ„ใฆใฎๅฎŸ่ฃ…ใฏใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃใƒฌใ‚คใƒคใƒผใซๅง”่ญฒใ™ใ‚‹ใ€‚

ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑค

  • ไธŠใฎ3ๅฑคใ‚’ๆ”ฏใˆใ‚‹ๆŠ€่ก“็š„ใชๅŸบ็›คใจใชใ‚‹ๅฑค

  • ๆฐธ็ถšๅŒ–ใ€ ใƒกใƒƒใ‚ปใƒผใ‚ธใƒณใ‚ฐใ€ใƒญใ‚ฎใƒณใ‚ฐ็ญ‰

  • ใƒกใƒƒใ‚ปใƒผใ‚ธใƒณใ‚ฐใซใฏใ€้€šไฟกใƒ—ใƒญใƒˆใ‚ณใƒซใซใ‚ˆใฃใฆ็จฎ้กžใŒใ‚ใ‚‹ใ€‚๏ผˆHTTPใ€UDPใ€AMQPใ€FTPใชใฉใ€‚๏ผ‰

  • ไธŠ่ฟฐใฎใƒฌใ‚คใƒคใƒผใ‚’ๆ”ฏใˆใ‚‹ไธ€่ˆฌ็š„ใชๆŠ€่ก“็š„ๆฉŸ่ƒฝใ‚’ๆไพ›ใ™ใ‚‹ใƒฌใ‚คใƒคใƒผใ€‚ใƒ‡ใƒผใ‚ฟใฎๆฐธ็ถšๅŒ–ใซ้–ขใ™ใ‚‹ๆŠ€่ก“็š„ใชๆฉŸ่ƒฝ๏ผˆใƒˆใƒฉใƒณใ‚ถใ‚ฏใ‚ทใƒงใƒณ็ฎก็†ใ‚„O/Rใƒžใƒƒใƒ‘ใƒผ๏ผ‰ใ‚„ใ€ใƒฆใƒผใ‚ถใƒผใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใ‚คใ‚นใฎใƒฌใƒณใƒ€ใƒชใƒณใ‚ฐๆฉŸ่ƒฝใชใฉใŒ่ฉฒๅฝ“ใ™ใ‚‹ใ€‚

  • ใ‚ฏใƒฉใ‚นใ‚’ใƒ‰ใƒกใ‚คใƒณๅฑคใซ็ฝฎใในใใ‹ใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซ็ฝฎใในใใ‹ใ€ๅˆคๆ–ญใ™ใ‚‹ๅŸบๆบ–ใฏใ€ใƒ‰ใƒกใ‚คใƒณๅฑคใฎใ‚ฏใƒฉใ‚นใซไพๅญ˜ใ™ใ‚‹ๅ ดๅˆใฏใƒ‰ใƒกใ‚คใƒณๅฑคใธใ€ใƒ‰ใƒกใ‚คใƒณๅฑคใซไพๅญ˜ใ—ใชใ„ๅ ดๅˆใฏใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซ็ฝฎใในใ๏ผŸ

ๅผ•็”จๅ…ƒ

https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap2.html http://www.shigemk2.com/entry/reactive_shinjuku_domain_event http://enterprisegeeks.hatenablog.com/entry/2016/07/25/081127

Pattern

Entities๏ผˆใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎไธญใซใฏใ€ใ‚ขใ‚คใƒ‡ใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ใ‚‚ใคใ‚‚ใฎ๏ผˆใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ๏ผ‰ใŒๅญ˜ๅœจใ™ใ‚‹ใ€‚ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฏใ€ใ‚ขใ‚คใƒ‡ใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใŒๅŒใ˜ใชใ‚‰ใฐใ€ๅฑžๆ€งใŒ็•ฐใชใฃใฆใ„ใฆใ‚‚ๅŒไธ€ใฎใ‚‚ใฎใจใ—ใฆๆ‰ฑใ‚ใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ€‚้€†ใซใ€ๅฑžๆ€งใŒใพใฃใŸใๅŒใ˜ใงใ‚‚ใ€ใ‚ขใ‚คใƒ‡ใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใŒ้•ใˆใฐๅฝ“็„ถๅˆฅใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใจใชใ‚‹ใ€‚ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฏใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใฎไธปๅฝนใงใ‚ใ‚Šใ€ใใฎใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซใ‚’่€ƒใˆใ‚‹ใ“ใจใŒ้‡่ฆใซใชใ‚‹ใ€‚ใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใฎไธญใซใŠใ„ใฆใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎๅŒไธ€ๆ€งใ‚’ใฉใ†ใ‚„ใฃใฆๅˆคๆ–ญใ™ใ‚‹ใ‹ใ‚’ๅฎš็พฉใ—ใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ€‚

  • ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใซ็™ปๅ ดใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ€‚ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณไธŠใงๅŒไธ€ๆ€งใฎ่ญ˜ๅˆฅใŒๅฟ…่ฆใชใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ€‚ใคใพใ‚Šใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณไธŠใงใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎไธ€ๆ„ๆ€งใ‚’ๆ„่ญ˜ใ—ใฆๆ‰ฑใ†ๅฟ…่ฆใŒใ‚ใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใ‚ใ‚‹ใ€‚ไปฅไธ‹ใฎใ‚ˆใ†ใชใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฏๆฅญๅ‹™ใ‚’้‚่กŒใ™ใ‚‹ใ†ใˆใงไธ€ๆ„ใซ็‰นๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚

็‰ฉใ€ใ‚ตใƒผใƒ“ใ‚น๏ผˆๅ•†ๅ“ใ€ๅœจๅบซ๏ผ‰ ไบบใ€็ต„็น”๏ผˆ้กงๅฎข๏ผ‰ ๅ ดๆ‰€๏ผˆ้…้€ๅ…ˆใ€ๅ€‰ๅบซใ€ไฟ็ฎกๅ ดๆ‰€๏ผ‰ ๅ–ๅผ•๏ผˆๆณจๆ–‡ใ€ๅœจๅบซๅผ•ๅฝ“๏ผ‰ ไปฎใซๅŒๅง“ๅŒๅๅˆฅไบบใฎ่ค‡ๆ•ฐใฎใ€Œ้กงๅฎขใ€ใŒใ„ใŸใจใ—ใŸใ‚‰ใ€ใใฎ้กงๅฎข้”ใฏๅˆฅใ€…ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใจใ—ใฆๆ‰ฑใ‚ใ‚Œใ‚‹ในใใงใ€ๅ็งฐใŒไธ€็ท’ใ ใ‹ใ‚‰ใจใ„ใฃใฆใใฎๅญ˜ๅœจใ‚’ไธ€ๆ‹ฌใ‚Šใซใ—ใฆใ—ใพใ†ใจใ€ๆณจๆ–‡ใ‚„้…้€ใŒ็›ฎ่Œถ่‹ฆ่Œถใซใชใฃใฆใ—ใพใ†ใ€‚้€†ใซใ€ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ”ใจใฎๅŒไธ€ๆ€งใ‚’ๆ„่ญ˜ใ—ใชใ„ๅ˜ใชใ‚‹ๆ•ฐ้‡ใ‚„้‡‘้กใจใ„ใฃใŸๅŒๅ€คๆ€งใง่ชžใ‚‰ใ‚Œใ‚‹ๆฆ‚ๅฟตใฏใ€ใ“ใฎๅพŒใซ็ดนไป‹ใ™ใ‚‹ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใชใ‚‹ใ€‚

Value Objects๏ผˆๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใจใฏ้€†ใซใ€ใŸใจใˆใฐใ€Œ่‰ฒใ€ใ‚„ใ€Œ้‡ใ€ใฎใ‚ˆใ†ใซใ€ใใฎๅฑžๆ€งใ ใ‘ใŒ้‡่ฆใงใ€ใ‚ขใ‚คใƒ‡ใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’่€ƒใˆใ‚‹ใ“ใจใซๆ„ๅ‘ณใฎใชใ„ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚‚ใ‚ใ‚‹ใ€‚ใใ†ใ—ใŸใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซๅˆ†้กžใ™ใ‚‹ใ€‚ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใฏใ€ไบ‹็‰ฉใฎๆ€ง่ณชใ‚’่กจ็พใ™ใ‚‹ใ‚‚ใฎใงใ‚ใ‚‹ใ€‚ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ็Šถๆ…‹ใ‚’ๅค‰ๆ›ดใงใใชใ„ใ‚‚ใฎ๏ผˆimmutable๏ผ‰ใจใ—ใฆๆ‰ฑใ†ใ€‚ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎ่ค‡้›‘ใ•ใซๅฐ‚ๅฟตใงใใ‚‹ใ‚ˆใ†ใซใ€ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ‚ทใƒณใƒ—ใƒซใช่จญ่จˆใซไฟใคใ‚ˆใ†ใซใ™ใ‚‹ใ€‚๏ผˆใ“ใฎๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€PofEAAใฎValue Objectใƒ‘ใ‚ฟใƒผใƒณใจๅŒใ˜ใ‚‚ใฎใ‚’่กจใ—ใฆใ„ใ‚‹๏ผ‰

  • ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใซ็™ปๅ ดใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ€‚ใƒ‰ใƒกใ‚คใƒณไธŠใซ็™ปๅ ดใ™ใ‚‹ๅ€คใใฎใ‚‚ใฎใ‚’ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆๅŒ–ใ—ใŸๅŒไธ€ๆ€งใ‚’ๆŒใŸใชใ„ๅฐๅž‹ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ€‚ไปฅไธ‹ใฎใ‚ˆใ†ใชใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ใƒ—ใƒชใƒŸใƒ†ใ‚ฃใƒ–ๅž‹ใ‚„ๆจ™ๆบ–ๅž‹๏ผˆStringๅž‹ใ‚„Dateๅž‹๏ผ‰ใงๅฎš็พฉใ™ใ‚‹ใฎใŒไธ€่ˆฌ็š„ใงใ‚ใ‚‹ใ€‚

ๆ•ฐ้‡ ้‡‘้ก ใ‚ณใƒผใƒ‰ ๆ—ฅไป˜ ๅŒบๅˆ† ใ“ใ‚Œใ‚‰ใ‚’ใ€Œๆณจๆ–‡็•ชๅทใ€ใ‚ฏใƒฉใ‚นใ€ใ€Œๆณจๆ–‡ๆ•ฐ้‡ใ€ใ‚ฏใƒฉใ‚นใ€ใ€Œ้…้€ไบˆๅฎšๆ—ฅใ€ใ‚ฏใƒฉใ‚นใ€ใ€Œๅ•†ๅ“ใ‚ณใƒผใƒ‰ใ€ใ‚ฏใƒฉใ‚นใจใ„ใฃใŸๆฅญๅ‹™ไธŠใฎๆ„ๅ‘ณใ‚’ๅฎฟใ‚‰ใ›ใŸใ‚ฏใƒฉใ‚นใจใ—ใฆๆ˜Ž็คบ็š„ใซๅฎš็พฉใ™ใ‚‹ใ“ใจใงใ€ใใฎๅ€ค่‡ช่บซใŒใ‚‚ใค็Ÿฅ่ญ˜ใ‚’ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซๅ‡็ธฎใ•ใ›ใ‚‹ใ“ใจใŒใงใใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขไธŠใฎ่กจ็พใจใ—ใฆใ‚‚ใ‚ˆใ‚Šๆ˜Ž็ขบใซใงใใ‚‹ใ€‚

ใƒ‰ใƒกใ‚คใƒณใ‚ตใƒผใƒ“ใ‚น(Domain Service)

  • ใƒ‰ใƒกใ‚คใƒณใงๆ‰ฑใ†ๆฆ‚ๅฟตใฎไธญใซใฏใ€1ใคใฎๆฉŸ่ƒฝใ‚„ๅ‡ฆ็†ใŒๅ˜ไฝ“ใงๅญ˜ๅœจใ—ใฆใ„ใฆใ€ใ‚‚ใฎ๏ผˆใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ๏ผ‰ใจใ—ใฆๆ‰ฑใ†ใฎใŒไธ่‡ช็„ถใชใ‚‚ใฎใ‚‚ใ‚ใ‚‹ใ€‚ใใ†ใ—ใŸใ‚‚ใฎใฏใ€ใ‚ตใƒผใƒ“ใ‚นใจใ„ใ†ๅฝขใงใƒฆใƒ“ใ‚ญใ‚ฟใ‚น่จ€่ชžใซ็ต„ใฟ่พผใ‚€ใ€‚ใ‚ตใƒผใƒ“ใ‚นใฏๅŸบๆœฌ็š„ใซ็Šถๆ…‹ใ‚’ใ‚‚ใŸใชใ„๏ผˆstateless๏ผ‰ใ€‚๏ผˆPofEAAใฎService Layerใƒ‘ใ‚ฟใƒผใƒณใจใฏ็•ฐใชใ‚‹ๆฆ‚ๅฟตใชใฎใงๆณจๆ„ใ€‚Service Layerใƒ‘ใ‚ฟใƒผใƒณใฏDDDใฎใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅฑคใซ็›ธๅฝ“ใ™ใ‚‹ใ‚‚ใฎใ‚’่จ€ใฃใฆใ„ใ‚‹ใŒใ€DDDใฎใ‚ตใƒผใƒ“ใ‚นใฏใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใฎไธญใซใ‚ใ‚‹ใ‚ตใƒผใƒ“ใ‚น็š„ใชใ‚‚ใฎใ‚’ๆŒ‡ใ—ใฆใ„ใ‚‹ใ€‚้‚ฆ่จณใฏใชใ„ใŒใ€Fowlerๆฐใฎ่จ˜ไบ‹ใ€ŒEvansใฎๅˆ†้กžใ€ใ‚‚ๅ‚่€ƒใซใชใ‚‹๏ผ‰

  • ๆœ€ๅˆใซใ€ใ€Œใ‚ตใƒผใƒ“ใ‚นใจใฏใ€ใƒขใƒŽใจใ—ใฆๆ‰ฑใ†ใจไธ่‡ช็„ถใชใ‚‚ใฎใ‚’ใ‚ตใƒผใƒ“ใ‚นใซๅˆ†้กžใ™ใ‚‹ใ€ใจ่งฆใ‚Œใพใ—ใŸใŒใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใจใ„ใ†ใƒขใƒŽใซๅˆ†้กžใงใใชใ„ใ‚ˆใ†ใชๆŒฏใ‚‹่ˆžใ„ใ‚’ๅˆ‡ใ‚Šๅ‡บใ™ๅ ดๆ‰€ใจ่€ƒใˆใ‚‹ใจใ‚ˆใ„ใงใ—ใ‚‡ใ†ใ€‚ใคใพใ‚Šใ€ใใ†ใ„ใ†ๆŒฏใ‚‹่ˆžใ„ใ‚’ๅˆ†้กžใ™ใ‚‹ๆ™‚ใซใ€ไพ‹ๅค–็š„ใ€ๆถˆๆฅต็š„ใซไฝฟใ†ใƒขใƒ‡ใƒซใจ่€ƒใˆใฆใใ ใ•ใ„ใ€‚

  • ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใซ็™ปๅ ดใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ€‚ ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ๏ผˆ็‰ฉใ€ไบบใ€ๅ ดๆ‰€ใ€ๅ–ๅผ•ใชใฉ๏ผ‰ใซใ‚‚ใ€ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ๏ผˆๅ€คใใฎใ‚‚ใฎ๏ผ‰ใซใ‚‚ๅฑžใ•ใชใ„ใ€ใƒ‰ใƒกใ‚คใƒณไธŠใฎใƒ“ใ‚ธใƒใ‚นใƒซใƒผใƒซใ‚„ใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚’ๆไพ›ใ™ใ‚‹ใ‚ตใƒผใƒ“ใ‚นใ€‚ ใ“ใ‚Œใ‚‰ใฏใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ˆใ†ใซๅฎŸไฝ“ใฎใƒขใƒŽใจใ—ใฆๆ‰ใˆใ‚‹ใฎใฏไธ่‡ช็„ถใงใ€ใƒ“ใ‚ธใƒใ‚นใƒซใƒผใƒซใซใ‚‚ใจใฅใ„ใŸ่จˆ็ฎ—ใ‚„ๅˆคๅฎšใจใ„ใฃใŸใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚’ๆ‹…ใ†ใ‚ตใƒผใƒ“ใ‚นใจใ™ใ‚‹ใฎใŒ้ฉๅˆ‡ใงใ‚ใ‚‹ใ€‚

ไพ‹ใˆใฐไปŠๅ›žใฎใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใงใ€ๅ•†ๅ“ใฎไพกๆ ผใ‚’็ฎ—ๅฎšใ—ใ‚ˆใ†ใจใ—ใŸๅ ดๅˆใ€ๆจ™ๆบ–ไพกๆ ผใ ใ‘ใชใ‚‰ใฐใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‹ใ‚‰็ฐกๅ˜ใซๅ–ๅพ—ใงใใ‚‹ใŒใ€ใพใจใ‚่ฒทใ„ใซใ‚ˆใ‚‹ๅ‰ฒๅผ•ใ‚„ๆœŸ้–“้™ๅฎšใงใฎๅ‰ฒๅผ•ใพใง่€ƒๆ…ฎใ—ใ‚ˆใ†ใจใ™ใ‚‹ใจ็ฐกๅ˜ใซใฏๅ–ๅพ—ใงใใชใ„ใ€‚ ๅฎŸ้š›ใฎ่ฒฉๅฃฒไพกๆ ผใ‚’ๆฑบๅฎšใ™ใ‚‹ใŸใ‚ใซใฏใ€่ซธใ€…ใฎใƒ“ใ‚ธใƒใ‚นใƒซใƒผใƒซใ‚’่ค‡ๅˆ็š„ใซๅŠ ๅ‘ณใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใŒใ€ไพกๆ ผใฎ็ฎ—ๅฎšๆ–นๆณ•ใ‚’ใƒขใƒŽใจใ—ใฆๅฎš็พฉใ™ใ‚‹ใฎใฏไธ่‡ช็„ถใชใŸใ‚ใ€ใƒ‰ใƒกใ‚คใƒณใ‚ตใƒผใƒ“ใ‚นใจใ—ใฆๅฎš็พฉใ™ใ‚‹ใ€‚ ใ“ใฎ็ฎ—ๅฎšๆ–นๆณ•ใŒ่‡ณใ‚‹ใจใ“ใ‚ใซๆ•ฃๅœจใ™ใ‚‹ใจใ€ใ‚ณใƒผใƒ‰้‡่ค‡ใ€ใƒกใƒณใƒ†ใƒŠใƒณใ‚นๆ€งไฝŽไธ‹ใ€ไพกๆ ผๅทฎ็•ฐ็™บ็”Ÿใชใฉใฎใƒใ‚ฐใฎๆธฉๅบŠใซใชใ‚‹ใŸใ‚ใ€ไพกๆ ผๆฑบๅฎšใซ้–ขใ™ใ‚‹็Ÿฅ่ญ˜ใฏใ€ใ“ใฎใƒ‰ใƒกใ‚คใƒณใ‚ตใƒผใƒ“ใ‚นใซๅ‡็ธฎใ•ใ›ใฆๅค–ใซๆตๅ‡บใ•ใ›ใฆใฏใ„ใ‘ใชใ„ใ€‚

ใƒ‰ใƒกใ‚คใƒณใ‚ตใƒผใƒ“ใ‚นใฎๆไพ›็ฒ’ๅบฆใฏใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ตใƒผใƒ“ใ‚นใฎๆง˜ใซใใ‚Œๅ˜ไฝ“ใงใƒฆใƒผใ‚นใ‚ฑใƒผใ‚นใ‚’ๆบ€ใŸใ™ใปใฉๅคง็ฒ’ใงใฏใชใใ€ใใฎใƒ‰ใƒกใ‚คใƒณๅ›บๆœ‰ใฎ็Ÿฅ่ญ˜็ฏ„ๅ›ฒใซ็‰นๅŒ–ใ—ใŸใ‚ตใƒผใƒ“ใ‚นใจใชใ‚‹ใ€‚ใพใŸใ€ใƒ‰ใƒกใ‚คใƒณใ‚ตใƒผใƒ“ใ‚นใฏใ€่จˆ็ฎ—ใ‚„ๅˆคๅฎšใ‚’่กŒใ†ไธŠใง่ค‡ๅˆ็š„ใช็Ÿฅ่ญ˜ใŒๅฟ…่ฆใจใชใ‚‹ใ“ใจใŒๅคšใใ€ๅคงๆŠตใฎๅ ดๅˆใฏ่ค‡ๆ•ฐใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆŸใญใŸไธญ็ฒ’ใฎใ‚ตใƒผใƒ“ใ‚นใ‚’ๆไพ›ใ™ใ‚‹ใ“ใจใซใชใ‚‹ใ€‚ ้€†ใซ่จ€ใ†ใจใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃๅ˜ไฝ“ใ‚„ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆๅ˜ไฝ“ใฎ็Ÿฅ่ญ˜ใงๆไพ›ใงใใ‚‹ใƒกใ‚ฝใƒƒใƒ‰ใŒใ‚ใ‚Œใฐใ€ใใ‚Œใฏใƒ‰ใƒกใ‚คใƒณใ‚ตใƒผใƒ“ใ‚นใงใฏใชใใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซ่จ˜่ฟฐใ™ใ‚Œใฐใ‚ˆใ„ใ€‚

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ตใƒผใƒ“ใ‚น(Application Service)

  • ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใƒฌใ‚คใƒคใƒผใซ็™ปๅ ดใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ€‚ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใฎๅคงๅฐๆง˜ใ€…ใช็Ÿฅ่ญ˜ใ‚’ๆŒ‡ๆฎ๏ผˆorchestrate๏ผ‰ใ—ใฆใ€ใƒฆใƒผใ‚ถใƒผใซๅฏพใ—ใฆๆ„ๅ‘ณใฎใ‚ใ‚‹ๅ˜ไฝใฎๆฉŸ่ƒฝใ‚’ๆไพ›ใ™ใ‚‹ใ‚ตใƒผใƒ“ใ‚นใ€‚ใƒฆใƒผใ‚นใ‚ฑใƒผใ‚นใซ็™ปๅ ดใ—ใฆใใ‚‹ใ‚ˆใ†ใชๆฉŸ่ƒฝใฏใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ตใƒผใƒ“ใ‚นใง่กจ็พใ™ใ‚‹ใ€‚ใ—ใ‹ใ—ๅฎŸ้š›ใฎใƒ“ใ‚ธใƒใ‚นใƒญใ‚ธใƒƒใ‚ฏใฎ่จ˜่ฟฐใฏใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใฎ้ƒจๅ“ใซๅง”่ญฒใ—ใฆใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ตใƒผใƒ“ใ‚น่‡ชไฝ“ใฏใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใฎ้ƒจๅ“ใฎ่ชฟๆ•ดใซๅพนใ™ใ‚‹ใ€‚

Modules๏ผˆใƒขใ‚ธใƒฅใƒผใƒซ๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • ใƒขใ‚ธใƒฅใƒผใƒซใฎไป•็ต„ใฟ๏ผˆJavaใฎใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใ‚„.NETใฎๅๅ‰็ฉบ้–“ใชใฉ๏ผ‰ใฏใ€ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใซใŠใ„ใฆใฏ่ชฐใ‚‚ใŒไฝฟใฃใฆใ„ใ‚‹ใ€‚ไบบ้–“ใŒไธ€ๅบฆใซ่€ƒใˆใ‚‰ใ‚Œใ‚‹็‰ฉไบ‹ใฎ้‡ใซใฏ้™็•ŒใŒใ‚ใ‚‹ใฎใงใ€ๆฆ‚ๅฟตใซใคใ„ใฆใ‚‚ๅŒใ˜ใ‚ˆใ†ใซใƒขใ‚ธใƒฅใƒผใƒซๅˆ†ๅ‰ฒใŒๅฟ…่ฆใงใ‚ใ‚‹ใ€‚ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใฎๅ ดๅˆใจๅŒใ˜ใใ€ใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใฎใƒขใ‚ธใƒฅใƒผใƒซๅˆ†ๅ‰ฒใซใŠใ„ใฆใ‚‚้ซ˜ๅ‡้›†๏ผไฝŽ็ตๅˆใŒ้‡่ฆใช็›ฎๅฎ‰ใซใชใ‚‹ใ€‚้–ข้€ฃใ—ๅˆใ†ๆฆ‚ๅฟตๅŒๅฃซใฏใฒใจใคใซใพใจใ‚๏ผˆ้ซ˜ๅ‡้›†๏ผ‰ใ€ใ‹ใคไธ€ๅบฆใซ่€ƒใˆใชใ‘ใ‚Œใฐใ„ใ‘ใชใ„็ฏ„ๅ›ฒใฏๆœ€ๅฐ้™ใซใ™ใ‚‹๏ผˆไฝŽ็ตๅˆ๏ผ‰ใ€‚ใƒขใ‚ธใƒฅใƒผใƒซใฎๅๅ‰ใ‚‚ใ€ใƒฆใƒ“ใ‚ญใ‚ฟใ‚น่จ€่ชžใฎ้‡่ฆใชไธ€่ฆ็ด ใจใ—ใฆๆ‰ฑใ†ใ€‚ใƒขใ‚ธใƒฅใƒผใƒซใ‚‚ใ‚ณใƒผใƒ‰ใจๅŒๆง˜ใ€ใƒชใƒ•ใ‚กใ‚ฏใ‚ฟใƒชใƒณใ‚ฐใซใ‚ˆใฃใฆใ‚ขใ‚ธใƒฃใ‚คใƒซใซ้€ฒๅŒ–ใ•ใ›ใฆใ„ใ‹ใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ€‚

Aggregates๏ผˆ้›†็ด„๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซใ‚’่จญ่จˆใ™ใ‚‹ใซใฏใ€ใพใšใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซใฎๅ˜ไฝใจใชใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใพใจใพใ‚Šใ‚’่€ƒใˆใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ€‚ใŸใจใˆใฐใ€Œๆณจๆ–‡ใ€ใจใ€Œๆณจๆ–‡ๆ˜Ž็ดฐใ€ใฎใ‚ˆใ†ใซใ€้–ข้€ฃใ™ใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ฐใƒซใƒผใƒ—ใฏ้›†็ด„ใจใ—ใฆๆ‰ฑใ„ใ€้›†็ด„ใ‚’ๅ˜ไฝใจใ—ใฆใƒขใƒ‡ใƒซใฎไป–ใฎ่ฆ็ด ใจใฎๅขƒ็•Œใ‚’ๆ˜Ž็ขบใซๅˆ†ใ‘ใ‚‹ใ€‚้›†็ด„ใฎไธญใ‹ใ‚‰1ใคใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’้ธใ‚“ใงใ€ใใ‚Œใ‚’้›†็ด„ใฎใƒซใƒผใƒˆ๏ผˆroot๏ผ‰ใจใ™ใ‚‹๏ผˆๅ…ˆใปใฉใฎไพ‹ใงใฏใ€ใ€Œๆณจๆ–‡ใ€ใŒใƒซใƒผใƒˆใซใชใ‚‹๏ผ‰ใ€‚1ๅ›žใใ‚Šใฎๅ‡ฆ็†ใงๅ‚็…งใŒ็ ดๆฃ„ใ•ใ‚Œใ‚‹ใ‚ˆใ†ใช็‰นๅˆฅใชๅ ดๅˆใ‚’้™คใ„ใฆใ€ๅค–้ƒจใ‹ใ‚‰ๅ‚็…งใงใใ‚‹ใฎใฏใƒซใƒผใƒˆใ ใ‘ใงใ€ไธญใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซๅฏพใ™ใ‚‹ๅ‡ฆ็†ใฏใ™ในใฆใƒซใƒผใƒˆใŒไธญ็ถ™ใ™ใ‚‹ใ€‚ใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€้›†็ด„ๅ†…ใฎใƒขใƒ‡ใƒซใฎไธ€่ฒซๆ€งใ‚’็ถญๆŒใ™ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚

  • ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใซ็™ปๅ ดใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ€‚ ๅฏ†ๆŽฅใซ้–ข้€ฃใฎใ‚ใ‚‹ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใƒใƒชใƒฅใƒผใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆๅŒๅฃซใ‚’้›†็ด„ใ—ใŸใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ฏใƒฉใ‚นใ‚ฟใ€‚

ไพ‹ใˆใฐไปŠๅ›žใฎใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใซใŠใ‘ใ‚‹ใ€Œๆณจๆ–‡ใƒ˜ใƒƒใƒ€ใ€-ใ€Œๆณจๆ–‡ๆ˜Ž็ดฐใ€ใฎ้–ข้€ฃใ‚ปใƒƒใƒˆใฏใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎไธญใงใใ‚Œใžใ‚Œๅ€‹ใ€…ใงๆ‰ฑใ‚ใ‚Œใ‚‹ใ‚ˆใ‚Šใ‚‚ใ€Œๆณจๆ–‡ใ€ใจใ„ใ†1ใ‚ปใƒƒใƒˆใงๆ‰ฑใ‚ใ‚Œใ‚‹ใ“ใจใŒๅคšใ„ใ ใ‚ใ†ใ€‚ๆณจๆ–‡ๅ•†ๅ“ใฎๆ˜Ž็ดฐใŒๅˆ†ใ‹ใ‚‰ใชใ„ๆณจๆ–‡ใƒ˜ใƒƒใƒ€ใ‚„ใ€ๆณจๆ–‡็•ชๅทใŒๅˆ†ใ‹ใ‚‰ใชใ„ๆณจๆ–‡ๆ˜Ž็ดฐใ ใ‘ใ‚ใฃใฆใ‚‚ๅฝนใซ็ซ‹ใŸใชใ„ใฎใงใ€็ตๅฑ€ใฏ้ƒฝๅบฆ้ƒฝๅบฆ ใŠไบ’ใ„ใฎ้–ข้€ฃใ‚’่พฟใ‚‹็พฝ็›ฎใซใชใ‚‹ใ€‚

ใ“ใ†ใ„ใฃใŸ้–ข้€ฃใ‚’ใ‚ซใƒ—ใ‚ปใƒซๅŒ–ใ—ใฆใ‚ขใ‚ฏใ‚ปใ‚นใ‚’ๅ˜็ด”ๅŒ–ใ™ใ‚‹ๅฝนๅ‰ฒใ‚’ๆ‹…ใ†ใฎใŒใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใงใ‚ใ‚‹ใ€‚

ใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใ‚’ใใ‚‹ๅ ดๅˆใ€ใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆๅ†…ใฎ1ใคใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ใ‚ขใ‚ฏใ‚ปใ‚นใƒใ‚คใƒณใƒˆ๏ผˆใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใƒซใƒผใƒˆใ€‚ไปŠๅ›žใ ใจใ€Œๆณจๆ–‡ใƒ˜ใƒƒใƒ€ใ€ใŒ่‡ช็„ถ๏ผ‰ใจใ—ใฆๅฎšใ‚ใฆๅค–้ƒจใซๅ…ฌ้–‹ใ—ใ€ใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆๅ†…ใฎๅ…ฅใ‚Š็ต„ใ‚“ใ ้–ข้€ฃใƒ‘ใ‚นใ‚’้š ่”ฝใ™ใ‚‹ใ“ใจใงใ€ๅค–้ƒจใ‹ใ‚‰ใฏใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใƒซใƒผใƒˆใ‚’้€šใ˜ใฆใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆๅ†…ใฎๆƒ…ๅ ฑใซ้€้Ž็š„ใซใ‚ขใ‚ฏใ‚ปใ‚นๅ‡บๆฅใ‚‹ใ‚ˆใ†ใซใชใ‚‹ใ€‚

Factories๏ผˆใƒ•ใ‚กใ‚ฏใƒˆใƒช๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚„้›†็ด„ใฎ็”Ÿๆˆๅ‡ฆ็†ใฏใใ‚Œ่‡ชไฝ“่ค‡้›‘ใซใชใ‚Šใ†ใ‚‹ใŸใ‚ใ€ใƒ•ใ‚กใ‚ฏใƒˆใƒชใ‚’ๅฐŽๅ…ฅใ—ใฆ็”Ÿๆˆๅ‡ฆ็†ใ‚’ใ‚ซใƒ—ใ‚ปใƒซๅŒ–*2ใ™ใ‚‹ใ€‚ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎ็”Ÿๆˆใใฎใ‚‚ใฎใŒใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซไธŠใง้‡่ฆใชๆ„ๅ‘ณใ‚’ใ‚‚ใคใ“ใจใฏ๏ผˆใปใจใ‚“ใฉ๏ผ‰ใชใ„ใŸใ‚ใ€ใƒ•ใ‚กใ‚ฏใƒˆใƒชใฏใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใฎไธ€้ƒจใงใฏใชใ„ใ€‚ใ‚ใใพใงใ€ใƒ‰ใƒกใ‚คใƒณใฎ่จญ่จˆไธŠๅฟ…่ฆใชไธ€่ฆ็ด ใ€ใจใ„ใ†ไฝ็ฝฎไป˜ใ‘ใซใชใ‚‹ใ€‚*2 ๆœฌๆฅใ€Œใ‚ซใƒ—ใ‚ปใƒซๅŒ–ใ€ใจใฏๅ˜ใซๅฑžๆ€งใ‚„ๆ“ไฝœใ‚’1ใคใซใพใจใ‚ใ‚‹ใ“ใจใ‚’่กจใ™ๆฆ‚ๅฟตใงใ€ๅฎŸ่ฃ…ใฎ่ฉณ็ดฐใ‚’ๅค–้ƒจใ‹ใ‚‰้š ใ™ๆฆ‚ๅฟตใงใ‚ใ‚‹ใ€Œๆƒ…ๅ ฑ้š ่”ฝใ€ใจใฏ็•ฐใชใ‚Šใพใ™ใ€‚ใ—ใ‹ใ—Evansใฏใ“ใฎ2ใคใ‚’ๆททๅŒใ—ใฆไฝฟใฃใฆใ„ใฆใ€ใ‚ซใƒ—ใ‚ปใƒซๅŒ–ใจใ„ใ†่จ€่‘‰ใ‚’ๆƒ…ๅ ฑ้š ่”ฝใฎๆ„ๅ‘ณใงใ‚‚ไฝฟใฃใฆใ„ใ‚‹ใ“ใจใซๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚

Repositories๏ผˆใƒชใƒใ‚ธใƒˆใƒช๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • ใƒ•ใ‚กใ‚ฏใƒˆใƒชใซใ‚ˆใ‚Š็”Ÿๆˆใ•ใ‚ŒใŸใƒ‰ใƒกใ‚คใƒณใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ๅฝน็›ฎใ‚’็ต‚ใˆใฆ็ ดๆฃ„ใ•ใ‚Œใ‚‹ใพใงใฏ็”Ÿๅญ˜ใ™ใ‚‹ใ€‚็”Ÿๅญ˜ๆœŸ้–“ใฎ้€”ไธญใงใ€ใปใจใ‚“ใฉใฎๅ ดๅˆใฏDBใชใฉใซใ„ใฃใŸใ‚“ๆฐธ็ถšๅŒ–ใ•ใ‚Œใ‚‹ใ€‚DBใธใฎๆฐธ็ถšๅŒ–ใ‚„ๅ•ใ„ๅˆใ‚ใ›ๅ‡ฆ็†ใฎ่ค‡้›‘ใ•ใซใ‚ˆใฃใฆใ€ใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใŒๆฑšๆŸ“ใ•ใ‚Œใชใ„ใ‚ˆใ†ใซใ™ใ‚‹ใŸใ‚ใ€ใƒชใƒใ‚ธใƒˆใƒชใจใ„ใ†ๆฐธ็ถšๅŒ–๏ผๅ•ใ„ๅˆใ‚ใ›ๅฐ‚็”จใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ใƒ‰ใƒกใ‚คใƒณ่จญ่จˆใซๅฐŽๅ…ฅใ™ใ‚‹๏ผˆใƒ•ใ‚กใ‚ฏใƒˆใƒชๅŒๆง˜ใ€ใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใฎไธ€้ƒจใงใฏใชใ„๏ผ‰ใ€‚ใƒชใƒใ‚ธใƒˆใƒชใ‚’ไฝฟใ†ๅดใ‹ใ‚‰ใฏใ€ใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใŒใ‚ใŸใ‹ใ‚‚ใƒกใƒขใƒชไธŠใซใ‚ณใƒฌใ‚ฏใ‚ทใƒงใƒณใจใ—ใฆๅญ˜ๅœจใ—ใฆใ„ใ‚‹ใ‹ใฎใ‚ˆใ†ใซ่ฆ‹ใˆใ‚‹ใ€‚ใƒชใƒใ‚ธใƒˆใƒชใฏใ€ใƒขใƒ‡ใƒซไธญใงใ‚ฐใƒญใƒผใƒใƒซใชใ‚ขใ‚ฏใ‚ปใ‚นใŒๅฟ…่ฆใชใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ๏ผˆ้›†็ด„ใฎๅ ดๅˆใฏใใฎใƒซใƒผใƒˆ๏ผ‰ๆฏŽใซใ€1ใค็”จๆ„ใ•ใ‚Œใ‚‹ใ€‚

  • ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใŠใ‚ˆใณใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃใƒฌใ‚คใƒคใƒผใซ็™ปๅ ดใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ€‚ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใฎไฟ็ฎก๏ผˆใƒ‡ใƒผใ‚ฟใ‚นใƒˆใ‚ขใธใฎๆฐธ็ถšๅŒ–ใ‚„ใ‚ญใƒฃใƒƒใ‚ทใƒฅใธใฎ่ฟฝๅŠ ใชใฉ๏ผ‰ใจใ€ไฟ็ฎกๆธˆใฟใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใฎๅ–ใ‚Šๅ‡บใ—ใ‚’ๆ‹…ใ†ๅฝนๅ‰ฒใ‚’ๆŒใŸใ›ใ‚‹ใ€‚ใใฎๅใฎใจใŠใ‚Šใ€ใพใ•ใซใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎ่ฒฏ่”ตๅบซใงใ‚ใ‚‹ใ€‚

ๅฐšใ€ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎไฟ็ฎกใซ้–ขใ™ใ‚‹ๆŠ€่ก“่ฆ็ด ใซใคใ„ใฆใฏใ€RDBใ‚’ๅˆฉ็”จใ™ใ‚‹ๅ ดๅˆใ‚‚ใ‚ใ‚Œใฐใ€NoSQLใ‚’ๅˆฉ็”จใ™ใ‚‹ๅ ดๅˆใ‚‚ใ‚ใ‚‹ใŒใ€ใ“ใ‚Œใ‚‰ใฎๆŠ€่ก“่ฆ็ด ใซ้–ขใ™ใ‚‹ใ‚ณใƒผใƒ‰ใซใคใ„ใฆใฏใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃใƒฌใ‚คใƒคใƒผใงๅฎŸ่ฃ…๏ผˆไพ‹ใˆใฐใ€SQLใฎใ‚ฏใ‚จใƒชใ‚ณใƒผใƒ‰ใชใฉ๏ผ‰ใ—ใฆใ€ใƒ‰ใƒกใ‚คใƒณใƒฌใ‚คใƒคใƒผใงใฏๆŠ€่ก“่ฆ็ด ใ‚’ๆ„่ญ˜ใ™ใ‚‹ใ“ใจใชใใ€ใƒ‰ใƒกใ‚คใƒณใฎ่จ€่‘‰ใงใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎไฟ็ฎกใƒปๅ–ใ‚Šๅ‡บใ—ใ‚’่กŒใ†ใ€‚

ๅ€‹ไบบ็š„ใชใƒ–ใƒฌใ‚นใƒˆ

  • Repositoryใ‚ฏใƒฉใ‚นใ‚’ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซ้…็ฝฎใ—ใŸๅ ดๅˆใ€RepositoryใŒใƒ‰ใƒกใ‚คใƒณๅฑคใซๅฑžใ™ใ‚‹Entityใ‚’่ฟ”ๅดใ™ใ‚‹ใ“ใจใ‚’่€ƒใˆใ‚‹ใจใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซใ‚ใ‚‹ใ‚ฏใƒฉใ‚น๏ผˆRepository๏ผ‰ใŒใ€ใƒ‰ใƒกใ‚คใƒณๅฑคใซใ‚ใ‚‹ใ‚ฏใƒฉใ‚น๏ผˆEntity๏ผ‰ใซไพๅญ˜ใ—ใฆใ„ใ‚‹่จ€ใˆใ‚‹ใ€‚้€šๅธธใ€ใƒ‰ใƒกใ‚คใƒณๅฑคใฏใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซไพๅญ˜ใ—ใฆใ„ใ‚‹ใŒใ€ใใฎไธŠใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใŒใƒ‰ใƒกใ‚คใƒณๅฑคใซไพๅญ˜ใ—ใฆใ—ใพใ†ใจใ€ใƒฌใ‚คใƒคใƒผๅŒๅฃซใŒๅŒๆ–นๅ‘ใฎไพๅญ˜้–ขไฟ‚ใ‚’ใ‚‚ใกใ€่ฟ”ใฃใฆใ€่ค‡้›‘ใ•ใ‚’ๆ‹›ใใฎใงใฏใชใ„ใ ใ‚ใ†ใ‹ใ€‚

  • RepositoryใจEntityใ€ไธกๆ–นใ‚’InterfaceใจImplementationใซๅˆ†ใ‘ใ€Interfaceใ‚’ใƒ‰ใƒกใ‚คใƒณๅฑคใซใŠใใ€Implementationใ‚’ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซใŠใใ€‚Interfaceใงใ‚ใ‚‹Repositoryใฏใ€Interfaceใงใ‚ใ‚‹Entityใซไพๅญ˜ใ—ใ€ไธ€ๆ–นใงใ€Implementationใงใ‚ใ‚‹RepositoryใฏImplementationใงใ‚ใ‚‹Entityใซไพๅญ˜ใ™ใ‚‹ใฎใงใ€ใƒ‰ใƒกใ‚คใƒณๅฑคใซไพๅญ˜ใ›ใšใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใฎๅ†…้ƒจใงๅฎŒ็ตใ™ใ‚‹ใ€‚

  • Imaplementationใฏใ€Interfaceใซไพๅญ˜ใ—ใฆใ„ใ‚‹ใฎใงใ€ไพๅญ˜้–ขไฟ‚ใฎๅŒๆ–นๅ‘ๆ€งใฏ่งฃๆฑบใ—ใŸใจใฏใ„ใˆใชใ„ใ‹ใ€‚

Specification๏ผˆไป•ๆง˜๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณ

  • isXxx()ใฎใ‚ˆใ†ใช็œŸๅฝๅ€คใ‚’่ฟ”ใ™ใƒกใ‚ฝใƒƒใƒ‰ใ‹ใ‚‰ใชใ‚‹ใƒ“ใ‚ธใƒใ‚นใƒซใƒผใƒซใฏใ€้€šๅธธใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚„ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซใฏไธŠๆ‰‹ใๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใชใ„ใ€‚ใƒ“ใ‚ธใƒใ‚นใƒซใƒผใƒซใ‚’ใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซไธŠใง่กจ็พใ™ใ‚‹ใซใฏใ€่ซ–็†ๅญฆใงใ„ใ†ใ€Œ่ฟฐ่ชžใ€๏ผˆpredicate๏ผ‰ใฎใ‚ˆใ†ใชๅฝน็›ฎใ‚’ใ™ใ‚‹็‰นๆฎŠใชๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๅฐŽๅ…ฅใ™ใ‚‹ใ€‚ใ“ใ‚ŒใŒใ™ใชใ‚ใกไป•ๆง˜ใงใ‚ใ‚‹ใ€‚ไป•ๆง˜ใฏไธ€่ˆฌใซใ€ๆฌกใฎ3ใคใ‚’่ฆๅฎšใ™ใ‚‹ใ€‚

ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎๅฆฅๅฝ“ๆ€งๆคœ่จผ๏ผˆvalidation๏ผ‰ ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎ้ธๅˆฅๆกไปถ๏ผˆselection๏ผ‰ ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎ็”Ÿๆˆๆกไปถ๏ผˆcreation๏ผ‰

Policyใƒ‘ใ‚ฟใƒผใƒณ

First Class Collectionใƒ‘ใ‚ฟใƒผใƒณ

ๅผ•็”จๅ…ƒ

Package Structure Samples

  1. https://gist.github.com/satooshi/6396551
sf2-ddd
โ”œโ”€โ”€ app
โ”œโ”€โ”€ bin
โ”œโ”€โ”€ build
โ”œโ”€โ”€ lib
โ”œโ”€โ”€ src
โ”‚   โ””โ”€โ”€ __VendorPrefix
โ”‚       โ”œโ”€โ”€ Application
โ”‚       โ”‚   โ””โ”€โ”€ __DomainNameBundle
โ”‚       โ”‚       โ”œโ”€โ”€ Command
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __Command.php
โ”‚       โ”‚       โ”œโ”€โ”€ Controller
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __Controller.php
โ”‚       โ”‚       โ”œโ”€โ”€ DependencyInjection
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Configuration.php
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ __CompilerPass.php
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __Extension.php
โ”‚       โ”‚       โ”œโ”€โ”€ Form
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Extension
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __FormExtension.php
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Model
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __FormDataModel.php
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ Type
โ”‚       โ”‚       โ”‚       โ””โ”€โ”€ __EntityType.php
โ”‚       โ”‚       โ”œโ”€โ”€ Page
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __Page.php
โ”‚       โ”‚       โ”œโ”€โ”€ Resources
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ config
โ”‚       โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ routing.yml
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ services.yml
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ translations
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ views
โ”‚       โ”‚       โ”œโ”€โ”€ Tests
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Command
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __CommandTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Controller
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __ControllerTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ DependencyInjection
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __DependencyInjectionTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Form
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __FormTestCases
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ Page
โ”‚       โ”‚       โ”‚       โ””โ”€โ”€ __PageTestCases
โ”‚       โ”‚       โ””โ”€โ”€ __DomainNameAppBundle.php
โ”‚       โ”œโ”€โ”€ Component
โ”‚       โ”œโ”€โ”€ Domain
โ”‚       โ”‚   โ”œโ”€โ”€ Shared
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ Value
โ”‚       โ”‚   โ”‚       โ”œโ”€โ”€ Gender.php
โ”‚       โ”‚   โ”‚       โ””โ”€โ”€ Interval.php
โ”‚       โ”‚   โ””โ”€โ”€ __DomainNameBundle
โ”‚       โ”‚       โ”œโ”€โ”€ Application
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __ApplicationService.php
โ”‚       โ”‚       โ”œโ”€โ”€ Entity
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Model
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __EntityDataModel.php
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __EntityExtendsDataModel.php
โ”‚       โ”‚       โ”œโ”€โ”€ Event
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __DomainEvent.php
โ”‚       โ”‚       โ”œโ”€โ”€ Exception
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __DomainException.php
โ”‚       โ”‚       โ”œโ”€โ”€ Interface
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Dto
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __ServiceDto.php
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ Facade
โ”‚       โ”‚       โ”‚       โ””โ”€โ”€ __ServiceFacade.php
โ”‚       โ”‚       โ”œโ”€โ”€ Listener
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ __DomainEventListener.php
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __EntityListener.php
โ”‚       โ”‚       โ”œโ”€โ”€ Repository
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __EntityRepositoryInterface.php
โ”‚       โ”‚       โ”œโ”€โ”€ Resources
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ config
โ”‚       โ”‚       โ”‚       โ”œโ”€โ”€ doctrine
โ”‚       โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ __Document.mongodb.xml
โ”‚       โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __Entity.orm.xml
โ”‚       โ”‚       โ”‚       โ”œโ”€โ”€ services.yml
โ”‚       โ”‚       โ”‚       โ””โ”€โ”€ validation.yml
โ”‚       โ”‚       โ”œโ”€โ”€ Service
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __DomainService.php
โ”‚       โ”‚       โ”œโ”€โ”€ Specification
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __DomainSpecification.php
โ”‚       โ”‚       โ”œโ”€โ”€ Tests
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Application
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __ApplicationServiceTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Entity
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __EntityTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Event
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __EventTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Exception
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __ExceptionTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Interface
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __InterfaceTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Listener
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __ListenerTestCaess
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Service
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __ServiceTestCases
โ”‚       โ”‚       โ”‚   โ”œโ”€โ”€ Specification
โ”‚       โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ __SpecificationTestCases
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ Validator
โ”‚       โ”‚       โ”‚       โ””โ”€โ”€ __ValidatorTestCases
โ”‚       โ”‚       โ”œโ”€โ”€ Validator
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ __DomainValidator.php
โ”‚       โ”‚       โ””โ”€โ”€ __DomainNameBundle.php
โ”‚       โ””โ”€โ”€ Infrastructure
โ”‚           โ””โ”€โ”€ __DomainNameBundle
โ”‚               โ”œโ”€โ”€ Messaging
โ”‚               โ”‚   โ”œโ”€โ”€ __EmailConsumer.php
โ”‚               โ”‚   โ””โ”€โ”€ __LoggingConsumer.php
โ”‚               โ”œโ”€โ”€ Repository
โ”‚               โ”‚   โ”œโ”€โ”€ __DocumentRepository.php
โ”‚               โ”‚   โ””โ”€โ”€ __EntityRepository.php
โ”‚               โ”œโ”€โ”€ Tests
โ”‚               โ”‚   โ”œโ”€โ”€ Messaging
โ”‚               โ”‚   โ”‚   โ””โ”€โ”€ __MessagingTestCases
โ”‚               โ”‚   โ””โ”€โ”€ Repository
โ”‚               โ”‚       โ””โ”€โ”€ __RepositoryTestCases
โ”‚               โ””โ”€โ”€ __DomainNameBundle.php
โ”œโ”€โ”€ tests
โ”‚   โ””โ”€โ”€ SeleniumTestSuite
โ”œโ”€โ”€ vendor
โ””โ”€โ”€ web
  1. https://codeforfunandmoney.wordpress.com/2016/07/13/domain-driven-design-and-package-organization/
src/main/java
โ”œโ”€โ”€ UserInterface
โ”‚   โ””โ”€โ”€ ... (java files)
โ”œโ”€โ”€ Application
โ”‚   โ”œโ”€โ”€ OneUseCase.java
โ”‚   โ”œโ”€โ”€ AnotherUseCase.java
โ”‚   โ””โ”€โ”€ YetAnotherUseCase.java
โ”œโ”€โ”€ Domain
โ”‚   โ”œโ”€โ”€ SubDomain1
โ”‚   โ”‚   โ””โ”€โ”€ ... (java files)
โ”‚   โ”œโ”€โ”€ SubDomain2
โ”‚   โ”‚   โ””โ”€โ”€ ... (java files)
โ”‚   โ”œโ”€โ”€ SubDomain3
โ”‚   โ”‚   โ””โ”€โ”€ ... (java files)
โ”‚   โ””โ”€โ”€ SubDomain3
โ”‚       โ””โ”€โ”€ ... (java files)
โ””โ”€โ”€ Infrastructure
    โ”œโ”€โ”€ database
    โ”‚   โ””โ”€โ”€ ... (java files)
    โ”œโ”€โ”€ logging
    โ”‚   โ””โ”€โ”€ ... (java files)
    โ””โ”€โ”€ httpclient
        โ””โ”€โ”€ ... (java files)
  1. http://williamdurand.fr/2013/08/07/ddd-with-symfony2-folder-structure-and-code-first/
src
โ””โ”€โ”€ Acme
    โ”œโ”€โ”€ ApiBundle
    โ”‚   โ”œโ”€โ”€ Controller
    โ”‚   โ”‚   โ””โ”€โ”€ UserController.php
    โ”‚   โ”œโ”€โ”€ Resources
    โ”‚   โ”‚   โ”œโ”€โ”€ config
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ routing.yml
    โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ serializer
    โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ User.User.yml
    โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ User.UserId.yml
    โ”‚   โ”‚   โ””โ”€โ”€ views
    โ”‚   โ”‚       โ””โ”€โ”€ User
    โ”‚   โ”‚           โ””โ”€โ”€ all.html.twig
    โ”‚   โ””โ”€โ”€ AcmeApiBundle.php
    โ”œโ”€โ”€ CoreDomain
    โ”‚   โ””โ”€โ”€ User
    โ”‚       โ”œโ”€โ”€ User.php
    โ”‚       โ”œโ”€โ”€ UserId.php
    โ”‚       โ””โ”€โ”€ UserRepository.php
    โ””โ”€โ”€ CoreDomainBundle
        โ”œโ”€โ”€ DependencyInjection
        โ”‚   โ””โ”€โ”€ AcmeCoreDomainExtension.php
        โ”œโ”€โ”€ Repository
        โ”‚   โ””โ”€โ”€ InMemoryUserRepository.php
        โ”œโ”€โ”€ Resources
        โ”‚   โ””โ”€โ”€ config
        โ”‚       โ””โ”€โ”€ repositories.xml
        โ””โ”€โ”€ AcmeCoreDomainBundle.php
  1. https://groups.google.com/forum/#!topic/dddinphp/ZGb8tHQgw8o
application
  user
    UserController.php
    UserService.php
  blog
    BlogController.php
    BlogService.php
domain
  user
    Avatar.php
    Address.php
    UserService.php
    UserRepository
  blog
    Post.php
    Comment.php
    BlogService.php
    BlogRepository.php
    User.php
    Blog.php
infrastructure
  user
    UserService.php
  blog
    BlogService.php
  1. https://laracasts.com/discuss/channels/general-discussion/folder-and-namespace-structure-with-ddd
app/
----ToDo/
--------App/
------------Providers/
----------------ToDoServiceProvider.php
----------------ConfigServiceProvider.php
------------Validators/
----------------LaravelValidator.php
------------ValueObject.php
------------BaseModel.php
--------Domain/
------------List/
----------------EloquentList.php
----------------ListRepository.php
----------------ListService.php
----------------ListValidator.php
----------------Priority.php
------------Task/
----------------EloquentTask.php
----------------TaskRepository.php
----------------TaskService.php
----------------TaskValidator.php
--------Http/
------------Lists/
----------------ListController.php
----------------ListPresenter.php
----------------ListViewComposer.php
------------Tasks/
----------------TaskController.php
--------Infrastructure/
------------Lists/
----------------ListRepositoryCacheDecorator.php
----------------EloquentListRepository.php
------------EloquentTaskRepository.php
  1. https://softwareengineering.stackexchange.com/questions/328648/java-ddd-project-organization
com.some.namespace
  application
    services = (app services that talk to repositories and domain model)
    validators = (validators for DTOs in app service layer)
  domain
    events = (domain events)
    exceptions = (exceptions in domain - eg. during validation or business logic)
    factories = (used to construct domain model objects - eg. construct from DTOs)
    model = (full domain model with all entities, value objects etc.)
    repositories = (interfaces only - implemented in infrastruct.)
    services = (domain service interfaces only - implemented in infrastr.)
  infrastructure
    messaging = (message listeners - eg RabbitMQ - talks to app services)
    repositories = (repository implementations)
      sql = (one version of repository implementation)
    rest = (rest endpoints - talks to application services)
    services = (domain service implementations)
  1. https://terasolunaorg.github.io/guideline/public_review/Overview/ApplicationLayering.html
[projectName]-domain
  โ””src
      โ””main
          โ”œjava
          โ”‚  โ””com
          โ”‚      โ””example
          โ”‚          โ””domain ...(1)
          โ”‚              โ”œmodel
          โ”‚              โ”‚  โ”œXxx.java
          โ”‚              โ”‚  โ”œYyy.java
          โ”‚              โ”‚  โ””Zzz.java
          โ”‚              โ”œrepository ...(2)
          โ”‚              โ”‚  โ”œxxx
          โ”‚              โ”‚  โ”‚  โ””XxxRepository.java
          โ”‚              โ”‚  โ”œyyy
          โ”‚              โ”‚  โ”‚  โ””YyyRepository.java
          โ”‚              โ”‚  โ””zzz
          โ”‚              โ”‚      โ”œZzzRepository.java
          โ”‚              โ”‚      โ””ZzzRepositoryImpl.java
          โ”‚              โ””service ...(3)
          โ”‚                  โ”œaaa
          โ”‚                  โ”‚  โ”œAaaService.java
          โ”‚                  โ”‚  โ””AaaServiceImpl.java
          โ”‚                  โ””bbb
          โ”‚                      โ”œBbbService.java
          โ”‚                      โ””BbbServiceImpl.java
          โ””resources
              โ””META-INF
                  โ””spring
                      โ”œ[projectname]-domain.xml ...(4)
                      โ””[projectname]-infra.xml ...(5)

(1) ใƒ‰ใƒกใ‚คใƒณใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆ ผ็ดใ™ใ‚‹ใ€‚ (2) ใƒชใƒใ‚ธใƒˆใƒชใ‚’ๆ ผ็ดใ™ใ‚‹ใ€‚ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ”ใจใซใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใ‚’ไฝœๆˆใ™ใ‚‹ใ€‚ ้–ข้€ฃใ™ใ‚‹ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใŒใ‚ใ‚Œใฐใ€ไธปใจใชใ‚‹ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใซใ€ๅพ“ใจใชใ‚‹ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎRepositoryใ‚‚้…็ฝฎใ™ใ‚‹ใ€‚ (OrderใจOrderLineใชใฉ)ใ€‚DTOใŒๅฟ…่ฆใชๅ ดๅˆใฏใ€ใ“ใฎใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใซ้…็ฝฎใ™ใ‚‹ใ€‚ RepositoryImplใฏใ€ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซๅฑžใ™ใ‚‹ใŒใ€้€šๅธธใ€ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๅซใ‚ใฆใ‚‚ๅ•้กŒใชใ„ใ€‚ ็•ฐใชใ‚‹ใƒ‡ใƒผใ‚ฟใ‚นใƒˆใ‚ขใ‚’ไฝฟใ†ใชใฉใ€่ค‡ๆ•ฐใฎๆฐธ็ถšๅŒ–ๅ…ˆใŒใ‚ใ‚Šใ€ๅฎŸ่ฃ…ใ‚’้š ่”ฝใ—ใŸใ„ๅ ดๅˆใฏใ€ๅˆฅใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ(ใพใŸใฏใƒ‘ใƒƒใ‚ฑใƒผใ‚ธ)ใซใ€RepositoryImplใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใ€‚ (3) ใ‚ตใƒผใƒ“ใ‚นใ‚’ๆ ผ็ดใ™ใ‚‹ใ€‚ๆฅญๅ‹™(ใพใŸใฏใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ)ใ”ใจใซใ€ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใ‚คใƒณใ‚ฟใƒ•ใ‚งใƒผใ‚นใจๅฎŸ่ฃ…ใ‚’ใ€ๅŒใ˜้šŽๅฑคใซ้…็ฝฎใ™ใ‚‹ใ€‚ ๅ…ฅๅ‡บๅŠ›ใ‚ฏใƒฉใ‚นใŒๅฟ…่ฆใชๅ ดๅˆใฏใ€ใ“ใฎใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใซ้…็ฝฎใ™ใ‚‹ใ€‚ (4) ใƒ‰ใƒกใ‚คใƒณๅฑคใซ้–ขใ™ใ‚‹Beanๅฎš็พฉใ‚’่กŒใ†ใ€‚ (5) ใ‚คใƒณใƒ•ใƒฉใ‚นใƒˆใƒฉใ‚ฏใƒใƒฃๅฑคใซ้–ขใ™ใ‚‹Beanๅฎš็พฉใ‚’่กŒใ†ใ€‚

[projectName]-web
  โ””src
      โ””main
          โ”œjava
          โ”‚  โ””com
          โ”‚      โ””example
          โ”‚          โ””app ...(1)
          โ”‚              โ”œabc
          โ”‚              โ”‚  โ”œAbcController.java
          โ”‚              โ”‚  โ”œAbcForm.java
          โ”‚              โ”‚  โ””AbcHelper.java
          โ”‚              โ””def
          โ”‚                  โ”œDefController.java
          โ”‚                  โ”œDefForm.java
          โ”‚                  โ””DefOutput.java
          โ”œresources
          โ”‚  โ”œMETA-INF
          โ”‚  โ”‚  โ””spring
          โ”‚  โ”‚      โ”œapplicationContext.xml ...(2)
          โ”‚  โ”‚      โ”œapplication.properties ...(3)
          โ”‚  โ”‚      โ”œspring-mvc.xml ...(4)
          โ”‚  โ”‚      โ””spring-security.xml ...(5)
          โ”‚  โ””i18n
          โ”‚      โ””application-messages.properties ...(6)
          โ””webapp
              โ””WEB-INF
                  โ”œviews ...(7)
                  โ”‚  โ”œabc
                  โ”‚  โ”‚ โ”œlist.jsp
                  โ”‚  โ”‚ โ””createForm.jsp
                  โ”‚  โ””def
                  โ”‚     โ”œlist.jsp
                  โ”‚     โ””createForm.jsp
                  โ””web.xml

(1) ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅฑคใฎๆง‹ๆˆ่ฆ็ด ใ‚’ๆ ผ็ดใ™ใ‚‹ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใ€‚ (2) ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅ…จไฝ“ใซ้–ขใ™ใ‚‹Beanๅฎš็พฉใ‚’่กŒใ†ใ€‚ (3) ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงไฝฟ็”จใ™ใ‚‹ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’ๅฎš็พฉใ™ใ‚‹ใ€‚ (4) SpringMVCใฎ่จญๅฎšใ‚’่กŒใ†Beanๅฎš็พฉใ‚’่กŒใ†ใ€‚ (5) SpringSecurityใฎ่จญๅฎšใ‚’่กŒใ†Beanๅฎš็พฉใ‚’่กŒใ†ใ€‚ (6) ็”ป้ข่กจ็คบ็”จใฎใƒกใƒƒใ‚ปใƒผใ‚ธ(ๅ›ฝ้š›ๅŒ–ๅฏพๅฟœ)ๅฎš็พฉใ‚’่กŒใ†ใ€‚ (7) View(jsp)ใ‚’ๆ ผ็ดใ™ใ‚‹ใ€‚

[projectName]-env
  โ””src
      โ””main
          โ””resources
              โ””META-INF
                  โ””spring
                      โ”œ[projectname]-env.xml ...(1)
                      โ””[projectname]-infra.properties ...(2)

(1) ็’ฐๅขƒใซไพๅญ˜ใ™ใ‚‹Beanๅฎš็พฉ(DataSource็ญ‰)ใ‚’่กŒใ†ใ€‚ (2) ็’ฐๅขƒใซไพๅญ˜ใ™ใ‚‹ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’ๅฎš็พฉใ™ใ‚‹ใ€‚

@ryu1
Copy link
Author

ryu1 commented Jun 1, 2022

ๅ‚่€ƒๆ–‡็Œฎ

59CEFE88-9DA3-4880-A130-C8A58BE57307
84E8E94C-106B-4545-809A-8FB0C06190CF

@ryu1
Copy link
Author

ryu1 commented Jan 11, 2024

@ryu1
Copy link
Author

ryu1 commented Jan 11, 2024

@ryu1
Copy link
Author

ryu1 commented Jul 25, 2024

ๅ‚่€ƒ:
https://github.com/dddjava

@ryu1
Copy link
Author

ryu1 commented Aug 4, 2024

SpecificationใจPlicyใฎ้•ใ„ใซใคใ„ใฆใฎ็ด ๆ™ดใ‚‰ใ—ใ„ๅ›ž็ญ”:

https://stackoverflow.com/questions/14185139/difference-between-specification-and-a-policy

specificationใฏใ€predicateใฎใ‚ˆใ†ใชใ‚‚ใฎ
policyใฏใ€Strategyใƒ‘ใ‚ฟใƒผใƒณ

@ryu1
Copy link
Author

ryu1 commented Sep 26, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment