Lino で完全な .NET アプリケーションを構築する: ステップバイステップガイド

ใ“ใฎใƒˆใƒ”ใƒƒใ‚ฏใงใฏใ€ใ‚’ไฝฟ็”จใ™ใ‚‹ใŸใ‚ใฎๅฎŸ็”จ็š„ใชใ‚นใƒ†ใƒƒใƒ—ใƒใ‚คใ‚นใƒ†ใƒƒใƒ—ใฎใ‚ฌใ‚คใƒ‰ใ‚’ๆไพ›ใ—ใพใ™ใ€‚ Lino CLI ใ‚คใƒณใ‚นใƒˆใƒผใƒซใจๅˆๆœŸๆง‹ๆˆใ‹ใ‚‰ใ€ใ‚ตใƒผใƒ“ใ‚นใ€ใƒขใ‚ธใƒฅใƒผใƒซใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎ็”Ÿๆˆใ‚’็ตŒใฆใ€ใ‚คใƒ™ใƒณใƒˆใ€Background Jobใ€็งป่กŒใ€Docker ใ‚คใƒกใƒผใ‚ธใฎๆง‹็ฏ‰ใ€ใƒใƒผใ‚ธใƒงใƒณ็ฎก็†ใชใฉใฎ้ซ˜ๅบฆใชๆฉŸ่ƒฝใซ่‡ณใ‚‹ใพใงใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆง‹็ฏ‰ใ™ใ‚‹ใŸใ‚ใฎไธป่ฆใชใƒ„ใƒผใƒซใจใ—ใฆไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚

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

ๅ„ใ‚ณใƒžใƒณใƒ‰ใซใฏใ™ใงใซ็‰นๅฎšใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใŒใ‚ใ‚Šใพใ™ใŒใ€ใ“ใ“ใงใฏใใฎใƒ—ใƒญใ‚ปใ‚นใ‚’็คบใ—ใพใ™ใ€‚ ใ‚จใƒณใƒ‰ใƒ„ใƒผใ‚จใƒณใƒ‰ โ€” ไฝ•ๆ™‚้–“ใ‚‚ใฎๅๅพฉไฝœๆฅญใ‚’็ฏ€็ด„ใ—ใ€ไธ€่ฒซๆ€งใฎใ‚ใ‚‹ใƒ†ใ‚นใƒˆๅฏ่ƒฝใชใ‚ณใƒผใƒ‰ใ‚’็ถญๆŒใ™ใ‚‹ใฎใซๅฝน็ซ‹ใคๅๅพฉๅฏ่ƒฝใชใƒญใƒผใƒ‰ใƒžใƒƒใƒ—ใ€‚

ใ“ใฎใ‚ฌใ‚คใƒ‰ๅ…จไฝ“ใ‚’้€šใ˜ใฆใ€Lino ใซใ‚ˆใฃใฆ้ฉ็”จใ•ใ‚Œใ‚‹ๆŠ€่ก“ๆฆ‚ๅฟตใซใคใ„ใฆ่ชฌๆ˜Žใ—ใพใ™ (ไพ‹: CQRSใ€ ๅž‹ไป˜ใ็ตๆžœใ€ ใ‚ฝใƒผใ‚นใ‚ธใ‚งใƒใƒฌใƒผใ‚ฟใƒผใ€ Outbox ใƒ‘ใ‚ฟใƒผใƒณ) ใงใฏใ€ใ‚ณใƒžใƒณใƒ‰ใฎไพ‹ใ‚’็คบใ—ใ€ใƒใƒผใ‚ธใƒงใƒณ็ฎก็†ใ€ๅฑ•้–‹ใ€็ถ™็ถš็š„็ตฑๅˆใฎๅ„ชใ‚ŒใŸใƒ—ใƒฉใ‚ฏใƒ†ใ‚ฃใ‚นใ‚’็คบใ—ใพใ™ใ€‚

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

Lino CLI ใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซใจๆง‹ๆˆ

ใ‚’ไฝฟใ„ๅง‹ใ‚ใ‚‹ใŸใ‚ใฎๆœ€ๅˆใฎใ‚นใƒ†ใƒƒใƒ— Lino CLI ้–‹็™บ็’ฐๅขƒใซใƒ„ใƒผใƒซใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ใ“ใจใงใ™ใ€‚ ใจใ—ใฆ้…ๅธƒใ•ใ‚Œใฆใ„ใพใ™ใ€‚ ใƒ‰ใƒƒใƒˆใƒใƒƒใƒˆ ใ‚ฐใƒญใƒผใƒใƒซ ใƒ„ใƒผใƒซใ“ใ‚Œใฏใ€ใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใƒผไธŠใฎใ™ในใฆใฎ.NET ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงไฝฟ็”จใงใใ‚‹ใ“ใจใ‚’ๆ„ๅ‘ณใ—ใพใ™ใ€‚ ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ™ใ‚‹ๅ‰ใซใ€็พๅœจใฎใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใซๅฟ…่ฆใช.NET SDK ใŒๅˆฉ็”จๅฏ่ƒฝใงใ‚ใ‚Šใ€ใ‚ฟใƒผใƒŸใƒŠใƒซใŒๅฎŸ่กŒใงใใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ dotnet .NET ใ‚ฐใƒญใƒผใƒใƒซ ใƒ„ใƒผใƒซ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ PATHใ€‚

ใ‚นใƒ†ใƒƒใƒ— 1: ใ‚คใƒณใ‚นใƒˆใƒผใƒซ

Lino CLI ใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซ (ใพใŸใฏๆ›ดๆ–ฐ) ใ™ใ‚‹ใซใฏใ€ใ‚ฟใƒผใƒŸใƒŠใƒซใงๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚

dotnet tool install --global Tolitech.Lino

้‡่ฆใชๆณจๆ„ไบ‹้ …:

  • ใ™ใงใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใƒใƒผใ‚ธใƒงใƒณใŒใ‚ใ‚‹ๅ ดๅˆใฏใ€ๆฌกใ‚’ไฝฟ็”จใงใใพใ™ dotnet tool update --global Tolitech.Lino ๆ›ดๆ–ฐใ—ใพใ™ใ€‚
  • .NET ใ‚ฐใƒญใƒผใƒใƒซ ใƒ„ใƒผใƒซ ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใŒ PATH ใ‚ทใ‚นใƒ†ใƒ ใฎใ‚ณใƒžใƒณใƒ‰ใŒ lino ๆญฃใ—ใๆฉŸ่ƒฝใ—ใพใ™ใ€‚

ใ‚นใƒ†ใƒƒใƒ— 2: ่จ€่ชžใ‚’ๆง‹ๆˆใ™ใ‚‹

ใ‚คใƒณใ‚นใƒˆใƒผใƒซๅพŒใ€CLI ใŒใƒกใƒƒใ‚ปใƒผใ‚ธใ€ใƒ—ใƒญใƒณใƒ—ใƒˆใ€ใƒญใ‚ฐใงไฝฟ็”จใ™ใ‚‹่จ€่ชž (ใพใŸใฏใ‚ซใƒซใƒใƒฃ) ใ‚’ๆง‹ๆˆใ™ใ‚‹ใ“ใจใ‚’ใŠๅ‹งใ‚ใ—ใพใ™ใ€‚

lino preferences culture set

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

ใ‚นใƒ†ใƒƒใƒ— 3: ่ช่จผใจ็™ป้Œฒ

้ซ˜ๅบฆใชใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ€Docker ใ‚คใƒกใƒผใ‚ธใฎๅ…ฌ้–‹ใ€ๅค–้ƒจใ‚ตใƒผใƒ“ใ‚นใจใฎ็ตฑๅˆใ‚’ๅซใ‚€ใ€ใ™ในใฆใฎ Lino ๆฉŸ่ƒฝใซใ‚ขใ‚ฏใ‚ปใ‚นใ™ใ‚‹ใซใฏใ€่ช่จผใ•ใ‚Œใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

- ใพใ ็™ป้Œฒใ—ใฆใ„ใชใ„ๅ ดๅˆใฏใ€ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใง็™ป้Œฒใ—ใพใ™ใ€‚

lino user register

- ใ™ใงใซ็™ป้Œฒๆธˆใฟใฎๅ ดๅˆใฏใ€ๆฌกใฎๆ–นๆณ•ใงใƒญใ‚ฐใ‚คใƒณใ—ใพใ™ใ€‚

lino auth login

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

ใ‚นใƒ†ใƒƒใƒ— 4: ๆคœ่จผ

ใ‚คใƒณใ‚นใƒˆใƒผใƒซใจ่ช่จผใŒๆˆๅŠŸใ—ใŸใ“ใจใ‚’็ขบ่ชใ™ใ‚‹ใซใฏใ€ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚

lino --version

ใ‚ณใƒžใƒณใƒ‰ใŒใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใ„ใ‚‹ใƒใƒผใ‚ธใƒงใƒณใ‚’่ฟ”ใ—ใŸๅ ดๅˆใฏใ€ไฝฟ็”จใ‚’้–‹ๅง‹ใ™ใ‚‹ๆบ–ๅ‚™ใŒใงใใฆใ„ใพใ™ใ€‚ Lino CLI ใ‚ใชใŸใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใ€‚

MyApp ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎไฝœๆˆ

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

ใ‚นใƒ†ใƒƒใƒ— 1: create ใ‚ณใƒžใƒณใƒ‰ใฎๅฎŸ่กŒ

ๆ–ฐใ—ใ„ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€ใ‚ฟใƒผใƒŸใƒŠใƒซใงไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚

lino project new

CLI ใฏๆฎต้šŽ็š„ใซใ‚ฌใ‚คใƒ‰ใ—ใ€ๆฌกใฎใ‚ˆใ†ใชๆƒ…ๅ ฑใ‚’ๆฑ‚ใ‚ใพใ™ใ€‚

  • ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ: ็งใŸใกใฏไฝฟ็”จใ—ใพใ™ MyAppใŸใ ใ—ใ€ๅฅฝใใชๅๅ‰ใ‚’้ธๆŠžใงใใพใ™ใ€‚
  • ่ฟฝๅŠ ๆฉŸ่ƒฝ: ใ‚ณใƒผใƒ‰ใ‚ขใƒŠใƒฉใ‚คใ‚ถใƒผใ€ๅˆ†ๆ•ฃใ‚ญใƒฃใƒƒใ‚ทใƒฅใ€้žๅŒๆœŸใ‚คใƒ™ใƒณใƒˆใฎใ‚ตใƒใƒผใƒˆใชใฉใ€‚

ใ‚นใƒ†ใƒƒใƒ— 2: ้‡่ฆใชๆฉŸ่ƒฝใฎๆง‹ๆˆ

ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใฏใ€ๆœ€ๅˆใ‹ใ‚‰ๆฌกใฎๆฉŸ่ƒฝใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใ“ใจใ‚’ใŠๅ‹งใ‚ใ—ใพใ™ใ€‚

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

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

ใ‚นใƒ†ใƒƒใƒ— 3: ็”Ÿๆˆใ•ใ‚ŒใŸๆง‹้€ 

ใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใฆใƒชใ‚ฝใƒผใ‚นใ‚’ๆง‹ๆˆใ™ใ‚‹ใจใ€CLI ใซใ‚ˆใฃใฆๅˆๆœŸใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๆง‹้€ ใŒ็”Ÿๆˆใ•ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใซใฏไปฅไธ‹ใŒๅซใพใ‚Œใพใ™:

  • ใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใฎใƒ•ใ‚ฉใƒซใƒ€ใƒผใ€‚
  • ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆ (่ฉฒๅฝ“ใ™ใ‚‹ๅ ดๅˆ)ใ€‚
  • ๅˆๆœŸใ‚ญใƒฃใƒƒใ‚ทใƒฅ่จญๅฎšใ€ใ‚คใƒ™ใƒณใƒˆใ€็ตฑๅˆใ€‚
  • ใ‚ฝใƒชใƒฅใƒผใ‚ทใƒงใƒณ (.slnx) ใŠใ‚ˆใณใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆ (.csproj) ใƒ•ใ‚กใ‚คใƒซใฏใ‚ณใƒณใƒ‘ใ‚คใƒซใฎๆบ–ๅ‚™ใŒใงใใฆใ„ใพใ™ใ€‚

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

ใƒใƒƒใ‚ฏใ‚ชใƒ•ใ‚ฃใ‚น Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎ่ฟฝๅŠ 

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

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

ใ‚นใƒ†ใƒƒใƒ— 1: create ใ‚ณใƒžใƒณใƒ‰ใฎๅฎŸ่กŒ

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๆ–ฐใ—ใ„ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’่ฟฝๅŠ ใ™ใ‚‹ใซใฏใ€ๆฌกใ‚’ไฝฟ็”จใ—ใพใ™:

lino web-app new

ๅ…ฅๅŠ›ใ‚’็ฐกๅ˜ใซใ™ใ‚‹ใŸใ‚ใ€ใ‚จใ‚คใƒชใ‚ขใ‚น lino webapp new ใ‚‚ๅˆฉ็”จใงใใพใ™ใ€‚ๅฎŸ่กŒไธญใฏ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใซๆ˜Ž็ขบใชๅๅ‰ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใ“ใฎไพ‹ใงใฏ Backoffice ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚

lino web-app new --name Backoffice

ใ‚นใƒ†ใƒƒใƒ— 2: ็”Ÿๆˆใ•ใ‚ŒใŸๆง‹้€ ใ‚’็†่งฃใ™ใ‚‹

ๅ‡ฆ็†ใŒๅฎŒไบ†ใ™ใ‚‹ใจใ€Lino ใฏ src/WebApps/<WebAppName> ใซ Web App ใฎๅˆๆœŸๆง‹้€ ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚Blazor ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎๅ ดๅˆใ€ใ“ใฎๆง‹้€ ใซใฏ server/client ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ€ๅ…ฑๆœ‰ใƒชใ‚ฝใƒผใ‚นใ€ใƒญใƒผใ‚ซใƒฉใ‚คใ‚บใƒ•ใ‚กใ‚คใƒซใ€API ใ‚’ๅˆฉ็”จใ™ใ‚‹ใŸใ‚ใฎ clientsใ€ๅพŒใง lino page new ใŒไฝฟ็”จใ™ใ‚‹่ฆ็ด„ใŒๅซใพใ‚Œใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚

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

ใ‚นใƒ†ใƒƒใƒ— 3: ใƒ•ใƒญใƒผๅ†…ใง Web ใ‚ขใƒ—ใƒชใ‚’ไฝœๆˆใ™ใ‚‹ใ‚ฟใ‚คใƒŸใƒณใ‚ฐ

ใ‚ทใ‚นใƒ†ใƒ ใซ Blazor ใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใƒผใ‚นใŒใ‚ใ‚‹ใ“ใจใŒๅˆ†ใ‹ใฃใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆไฝœๆˆ็›ดๅพŒใฎๆ—ฉใ„ๆฎต้šŽใง Web App ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ๅพŒใ‹ใ‚‰็”Ÿๆˆใ•ใ‚Œใ‚‹ servicesใ€modulesใ€entitiesใ€APIsใ€pages ใŒใ€ใใ‚Œใ‚‰ใ‚’ๅˆฉ็”จใ™ใ‚‹ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใจๆœ€ๅˆใ‹ใ‚‰ๆ•ดๅˆใ—ใพใ™ใ€‚

ใ“ใฎๆตใ‚ŒใŒ็‰นใซๆœ‰็”จใชใฎใฏใ€ๅพŒใ‹ใ‚‰ไฝœๆˆใ•ใ‚Œใ‚‹ services ใ‚‚ใ€Blazor ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‹ใ‚‰ๅˆฉ็”จใ•ใ‚Œใ‚‹ๅž‹ไป˜ใใฎ Api.Contracts ใจ Api.Client ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใงใ™ใ€‚ๆœ€ๅˆใ‹ใ‚‰ Web App ใŒๅญ˜ๅœจใ—ใฆใ„ใ‚Œใฐใ€domainใ€APIใ€contractsใ€HttpClientใ€็”ป้ขใพใงใฎไธ€้€ฃใฎๆตใ‚Œใ‚’ๆคœ่จผใ—ใ‚„ใ™ใใชใ‚Šใพใ™ใ€‚

้‡่ฆใชๆณจๆ„ไบ‹้ …

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

Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ไฝœๆˆใ—ใŸใ‚‰ใ€ใ‚ฌใ‚คใƒ‰ใฏใ€ใ“ใฎใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใ‚คใ‚นใงไฝฟ็”จใ•ใ‚Œใ‚‹ใƒ‡ใƒผใ‚ฟใจใƒ“ใ‚ธใƒใ‚น ใƒซใƒผใƒซใ‚’ๆไพ›ใ™ใ‚‹ใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใซ้€ฒใ‚€ใ“ใจใŒใงใใพใ™ใ€‚

ใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใฎไฝœๆˆ

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

ใ‚นใƒ†ใƒƒใƒ— 1: ใ‚ตใƒผใƒ“ใ‚นใ‚’ๅฎš็พฉใ™ใ‚‹

ๆœ€ๅˆใซใ€ๆ˜Ž็ขบใซๅฎš็พฉใ•ใ‚ŒใŸ่ฒฌไปปใ‚’ๆŒใคๆฌกใฎใ‚ตใƒผใƒ“ใ‚นใ‚’ไฝœๆˆใ—ใพใ™ใ€‚

  • Catalog (ใƒขใ‚ธใƒฅใƒผใƒซๅผ) โ€“ ่ฃฝๅ“ใ€ใ‚ซใƒ†ใ‚ดใƒชใ€ไพกๆ ผใฎ็ฎก็†ใ‚’ๆ‹…ๅฝ“ใ—ใพใ™ใ€‚
  • Sales โ€“ ่ฒฉๅฃฒใจๆณจๆ–‡ใฎๅ‡ฆ็†ใ‚’ๆ‹…ๅฝ“ใ—ใพใ™ใ€‚
  • Stock โ€“ ๅœจๅบซใจ็งปๅ‹•ใฎ็ฎก็†ใ‚’ๆ‹…ๅฝ“ใ—ใพใ™ใ€‚
  • Security โ€“ ่ช่จผใ€่ชๅฏใ€ใƒฆใƒผใ‚ถใƒผ็ฎก็†ใ‚’ๆ‹…ๅฝ“ใ—ใพใ™ใ€‚

ไพ‹ใฎ services ใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€service ใ”ใจใซ 1 ใคใšใคใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚Catalog ใฎ wizard ใงใฏ modular architecture ใ‚’้ธใณใ€ใใฎไป–ใฏๅ˜็ด”ใชๅขƒ็•Œใซ้ฉใ—ใŸ architecture ใ‚’้ธๆŠžใ—ใพใ™ใ€‚

lino service new --name Catalog
lino service new --name Sales
lino service new --name Stock
lino service new --name Security

ใ‚ณใƒžใƒณใƒ‰ๅฎŸ่กŒไธญใ€CLI ใฏๆฌกใฎๆƒ…ๅ ฑใ‚’ๆฑ‚ใ‚ใพใ™:

  • Service name: ไพ‹: Catalog;
  • Display name and architectural style: ๅฐใ•ใชๅขƒ็•Œใซใฏ simple architecture ใ‚’ใ€service ใซ็‹ฌ็ซ‹ใ—ใŸๅ‡้›†ๅบฆใฎ้ซ˜ใ„้ ˜ๅŸŸใŒใ‚ใ‚‹ๅ ดๅˆใฏ modular ใ‚’้ธๆŠžใ—ใพใ™;
  • Database: ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซๆœ€ใ‚‚้ฉใ—ใŸๆŠ€่ก“ใ‚’้ธๆŠžใ—ใพใ™ (SQL Serverใ€PostgreSQL ใชใฉ);

ใ‚นใƒ†ใƒƒใƒ— 2: services ๅ†…ใซ modules ใ‚’ไฝœๆˆใ™ใ‚‹

ใ™ในใฆใฎ services ใŒ modular ใงใ‚ใ‚‹ๅฟ…่ฆใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใ“ใฎ project ใงใฏใ€merchandising ใ‚„ pricing ใชใฉใฎ่ฒฌๅ‹™ใ‚’ๅˆ†้›ขใ™ใ‚‹ใŸใ‚ใ€Catalog service ใ ใ‘ใŒ modules ใ‚’ๆŒใกใพใ™ใ€‚

Catalog service ใซใฏๆฌกใฎ modules ใ‚’ๅฎš็พฉใ—ใพใ™:

  • Merchandising โ€“ products ใจ categories ใฎ็ฎก็†;
  • Pricing โ€“ pricesใ€promotionsใ€ๅค‰ๆ›ดๅฑฅๆญดใฎ็ฎก็†ใ€‚

Catalog ใฎ modules ใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€ๆฌกใ‚’ๅฎŸ่กŒใ—ใพใ™:

lino module new --service Catalog --name Merchandising
lino module new --service Catalog --name Pricing

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

ๆœ€็ต‚็š„ใชใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๆง‹้€ 

ใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไฝœๆˆใ—ใŸๅพŒใ€ใ‚ฝใƒชใƒฅใƒผใ‚ทใƒงใƒณใฏๆฌกใฎใ‚ˆใ†ใชๆง‹้€ ใซใชใ‚‹ใฏใšใงใ™ใ€‚

MyApp/
โ””โ”€โ”€ src/
    โ”œโ”€โ”€ Aspire/
    โ”œโ”€โ”€ Integrations/
    โ”œโ”€โ”€ Services/
    โ”‚   โ”œโ”€โ”€ Catalog/
    โ”‚   โ”‚   โ”œโ”€โ”€ Modules/
    โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Merchandising/
    โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ Pricing/
    โ”‚   โ”‚   โ”œโ”€โ”€ MyApp.Catalog.Host
    โ”‚   โ”‚   โ””โ”€โ”€ MyApp.Catalog.Infrastructure
    โ”‚   โ”œโ”€โ”€ Sales/
    โ”‚   โ”œโ”€โ”€ Security/
    โ”‚   โ”œโ”€โ”€ Shared/
    โ”‚   โ””โ”€โ”€ Stock/
    โ””โ”€โ”€ WebApps/
        โ”œโ”€โ”€ Backoffice/
        โ”‚   โ”œโ”€โ”€ Services/
        โ”‚   โ”‚   โ”œโ”€โ”€ Catalog/
        โ”‚   โ”‚   โ”œโ”€โ”€ Sales/
        โ”‚   โ”‚   โ”œโ”€โ”€ Security/
        โ”‚   โ”‚   โ””โ”€โ”€ Stock/
        โ”‚   โ”œโ”€โ”€ MyApp.WebApp.Backoffice
        โ”‚   โ””โ”€โ”€ MyApp.WebApp.Backoffice.Client
        โ””โ”€โ”€ Shared/
            โ””โ”€โ”€ MyApp.WebApp.Shared
โ””โ”€โ”€ tests/
    โ””โ”€โ”€ Services/
        โ”œโ”€โ”€ Catalog/
        โ”‚   โ”œโ”€โ”€ Merchandising/
        โ”‚   โ””โ”€โ”€ Pricing/
        โ”œโ”€โ”€ Sales/
        โ”œโ”€โ”€ Security/
        โ”œโ”€โ”€ Shared/
        โ””โ”€โ”€ Stock/

ๆง‹้€ ใฎ่ชฌๆ˜Ž:

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

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

่ช่จผใจ่ชๅฏใฎ่ฟฝๅŠ 

่ช่จผใจ่ชๅฏใฏใ€็พไปฃใฎใ‚ทใ‚นใƒ†ใƒ ใซใจใฃใฆไธๅฏๆฌ ใช่ฆ็ด ใงใ™ใ€‚ ่ช่จผใฏใƒฆใƒผใ‚ถใƒผใŒ่ชฐใงใ‚ใ‚‹ใ‹ใ‚’่จผๆ˜Žใ—ใพใ™ใ€‚่ชๅฏใฏใ€ใ“ใฎใƒฆใƒผใ‚ถใƒผใŒๅฎŸ่กŒใงใใ‚‹ๅ†…ๅฎนใ‚’ๅฎš็พฉใ—ใพใ™ใ€‚Lino CLI ใงใฏใ€่ช่จผๆฉŸ่ƒฝใฏใ€ใƒฆใƒผใ‚ถใƒผใ€ใƒญใƒผใƒซใ€ๆจฉ้™ใ€ใƒˆใƒผใ‚ฏใƒณใ€ใ‚ขใ‚ฏใ‚ปใ‚น ใƒใƒชใ‚ทใƒผใ€ใŠใ‚ˆใณ API ใจใฎ็ตฑๅˆใซๅฟ…่ฆใชใƒ™ใƒผใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ใ€‚

ใ‚นใƒ†ใƒƒใƒ— 1: ่ช่จผใ‚ณใƒžใƒณใƒ‰ใฎๅฎŸ่กŒ

่ช่จผใŠใ‚ˆใณ่ชๅฏๆฉŸ่ƒฝใ‚’่ฟฝๅŠ ใ™ใ‚‹ใซใฏใ€ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚

lino feature auth add

CLI ใฏๆฌกใฎๆ‰‹้ †ใ‚’ๆกˆๅ†…ใ—ใพใ™ใ€‚

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

ใ‚นใƒ†ใƒƒใƒ— 2: ็”Ÿๆˆใ•ใ‚ŒใŸๆง‹้€ 

ใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใ€ใ‚ตใƒผใƒ“ใ‚นใŒ Security ๆฌกใฎใ‚ˆใ†ใชใƒ•ใ‚กใ‚คใƒซใจใƒ•ใ‚ฉใƒซใƒ€ใƒผใŒๅซใพใ‚Œใพใ™ใ€‚

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

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

Background Jobใฎ่ฟฝๅŠ 

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

Lino ใฏๆจ™ๆบ–ใ‚’ไฝฟ็”จใ—ใพใ™ Outbox ใƒ‘ใ‚ฟใƒผใƒณ ใ‚ตใƒผใƒ“ใ‚นใซใ‚ˆใฃใฆ็”Ÿๆˆใ•ใ‚ŒใŸใ™ในใฆใฎใƒกใƒƒใ‚ปใƒผใ‚ธใŒ้€ไฟกๅ‰ใซ็ขบๅฎŸใซ่จ˜้Œฒใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚ ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ๆฌกใฎใ“ใจใŒ้”ๆˆใ•ใ‚Œใพใ—ใŸใ€‚

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

ใ‚นใƒ†ใƒƒใƒ— 1: ใ‚ณใƒžใƒณใƒ‰ใฎๅฎŸ่กŒ

Background Jobใฎใ‚ตใƒใƒผใƒˆใ‚’ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซ่ฟฝๅŠ ใ™ใ‚‹ใซใฏใ€ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚

lino feature background-job add

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

ใ‚นใƒ†ใƒƒใƒ— 2: ๅฎŸ่กŒใฎๆง‹ๆˆ

ๆง‹ๆˆไธญใซใ€ไปฅไธ‹ใ‚’ๅฎš็พฉใงใใพใ™ใ€‚

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

ใ“ใ‚Œใ‚‰ใฎใƒ‘ใƒฉใƒกใƒผใ‚ฟใƒผใฏใ€ใ‚ทใ‚นใƒ†ใƒ ใฎใ‚ตใ‚คใ‚บใ€ใƒžใ‚ทใƒณใฎๅฎน้‡ใ€ใŠใ‚ˆใณไบˆๆƒณใ•ใ‚Œใ‚‹ใ‚คใƒ™ใƒณใƒˆใฎ้‡ใซใ‚ˆใฃใฆ็•ฐใชใ‚Šใพใ™ใ€‚

ใ‚นใƒ†ใƒƒใƒ— 3: ็”Ÿๆˆใ•ใ‚ŒใŸๆง‹้€ 

ๆง‹ๆˆๅพŒใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซใฏใƒ†ใƒผใƒ–ใƒซใ‹ใ‚‰ใฎใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๅ‡ฆ็†ใงใใ‚‹Background JobใŒ็”จๆ„ใ•ใ‚Œใพใ™ใ€‚ Outbox ๅ„ใ‚ตใƒผใƒ“ใ‚นใงใ€‚

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

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

ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใจๅˆ—ๆŒ™ใฎไฝœๆˆ

ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใงใฏใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ€ๅˆ—ๆŒ™ใ€Value Objectใฎ่จญ่จˆใซใคใ„ใฆ่ฉณใ—ใ่ชฌๆ˜Žใ—ใ€ๅ„้ …็›ฎใŒใฉใฎใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใงไฝœๆˆใ•ใ‚Œใ‚‹ใ‹ใ‚’็คบใ—ใพใ™ใ€‚

1. ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎไฝœๆˆ Category

Catalog ใ‚ตใƒผใƒ“ใ‚นใจ Merchandising ใƒขใ‚ธใƒฅใƒผใƒซใซ Category entity ใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€ๆฌกใ‚’ๅฎŸ่กŒใ—ใพใ™:

lino entity new --service Catalog --module Merchandising --name Category

ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฏใ‚ตใƒผใƒ“ใ‚นๅ†…ใซไฝœๆˆใ•ใ‚Œใพใ™ Catalog ใใ—ใฆใƒขใ‚ธใƒฅใƒผใƒซๅ†…ใง Merchandising ๆฌกใฎๆง‹้€ ใง:

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PK โ”‚ FK โ”‚ Property name โ”‚ Type   โ”‚ Length โ”‚ Required โ”‚ Auto-increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ x  โ”‚    โ”‚ Id            โ”‚ Guid   โ”‚        โ”‚    x     โ”‚       x        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Name          โ”‚ string โ”‚   50   โ”‚    x     โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2. ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎไฝœๆˆ Product

ๆฌกใซใ€ๅŒใ˜ใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใซ Product entity ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ใ“ใฎๆตใ‚Œใงใฏใ€Value Object ProductDimension ใจ enum ProductStatus ใฏใ€Product aggregate ใฎไธ€้ƒจใจใ—ใฆใ€entity ไฝœๆˆ wizard ใฎไธญใง่จญๅฎšใ—ใพใ™:

lino entity new --service Catalog --module Merchandising --name Product

ๅฎŸ่กŒไธญใซใ€ๅ˜็ด”ใช propertiesใ€Category ใจใฎ relationshipใ€Value Object ๅž‹ใฎ Dimensions propertyใ€Enum ๅž‹ใฎ Status property ใ‚’่ฟฝๅŠ ใ—ใพใ™ใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PK โ”‚ FK โ”‚ Property name โ”‚ Type        โ”‚ Length โ”‚ Required โ”‚ Auto-increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ x  โ”‚    โ”‚ Id            โ”‚ Guid        โ”‚        โ”‚    x     โ”‚       x        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Name          โ”‚ string      โ”‚  100   โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Description   โ”‚ string      โ”‚  500   โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Price         โ”‚ decimal     โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚ x  โ”‚ CategoryId    โ”‚ Category    โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Dimensions    โ”‚ ValueObject โ”‚        โ”‚          โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Status        โ”‚ Enum        โ”‚        โ”‚    x     โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2.1 Product ๅ†…ใง Value Object ProductDimension ใ‚’่จญๅฎšใ™ใ‚‹

ใ“ใฎใ‚ฌใ‚คใƒ‰ใฎใ‚ทใƒŠใƒชใ‚ชใงใฏใ€ProductDimension ใฏๅˆฅใ‚ณใƒžใƒณใƒ‰ใงใฏไฝœๆˆใ—ใพใ›ใ‚“ใ€‚Product ใฎ lino entity new ๅฎŸ่กŒไธญใซ Dimensions property ใจใ—ใฆ่ฟฝๅŠ ใ•ใ‚Œใ€่ฃฝๅ“ใฎๅฏธๆณ•ใ‚’่กจใ—ใพใ™:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Property name โ”‚ Type    โ”‚ Length โ”‚ Required โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Width         โ”‚ decimal โ”‚        โ”‚    x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Height        โ”‚ decimal โ”‚        โ”‚    x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Depth         โ”‚ decimal โ”‚        โ”‚    x     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆณจ: lino value-object new ใ‚ณใƒžใƒณใƒ‰ใฏใ€Value Object ใ‚’ๅ€‹ๅˆฅใซไฝœๆˆใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ‚ทใƒŠใƒชใ‚ชๅ‘ใ‘ใซ็”จๆ„ใ•ใ‚Œใฆใ„ใพใ™ใ€‚ใใฎๅ ดๅˆใฏใ€ๅฏพ่ฑกใฎ service ใจ module ใฎๅผ•ๆ•ฐใ‚’ไฝฟ็”จใ—ใพใ™:

lino value-object new --service <ServiceName> --module <ModuleName> --name <ValueObjectName>

2.2 Product ๅ†…ใง Enum ProductStatus ใ‚’่จญๅฎšใ™ใ‚‹

ๅŒๆง˜ใซใ€ProductStatus ใฏ Product ใฎ lino entity new ๅ†…ใง Status property ใจใ—ใฆ่จญๅฎšใ•ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใฏ่ฃฝๅ“ใฎใ‚นใƒ†ใƒผใ‚ฟใ‚นใ‚’ๅฎš็พฉใ—ใพใ™:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Value โ”‚ Name         โ”‚ Display Name โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 1     โ”‚ Active       โ”‚ Active       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 2     โ”‚ Inactive     โ”‚ Inactive     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 3     โ”‚ Discontinued โ”‚ Discontinued โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆณจ: ๅˆฅใฎใ‚ทใƒŠใƒชใ‚ชใง enum ใ‚’ๅ€‹ๅˆฅใซไฝœๆˆใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ๅ ดๅˆใฏใ€lino enumeration new ใ‚ณใƒžใƒณใƒ‰ใ‚‚ไฝฟ็”จใงใใพใ™:

lino enumeration new --service <ServiceName> --module <ModuleName> --name <EnumerationName>

3. ๆ–ฐใ—ใ„ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใฎ่ฟฝๅŠ 

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใŒ้€ฒ่กŒใ™ใ‚‹ใซใคใ‚Œใฆใ€ๆ—ขๅญ˜ใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’็ทจ้›†ใ—ใฆๆ–ฐใ—ใ„ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’่ฟฝๅŠ ใงใใพใ™ใ€‚ ใŸใจใˆใฐใ€็”ปๅƒใฎใƒชใ‚นใƒˆใ‚’ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚ Product:

lino entity edit --service Catalog --module Merchandising --entity Product

ใ“ใฎๅŒใ˜ๆตใ‚Œใฎไธญใงใ€List<ProductImage> ๅž‹ใฎ Images property ใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ProductImage ใฏ Product aggregate ใซๅฑžใ™ใ‚‹ใŸใ‚ใ€ใใฎๆง‹้€ ใ‚‚ Product ใฎ lino entity edit ไธญใซ่จญๅฎšใ—ใพใ™:

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PK โ”‚ FK โ”‚ Property name โ”‚ Type               โ”‚ Length โ”‚ Required โ”‚ Auto-increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ x  โ”‚    โ”‚ Id            โ”‚ Guid               โ”‚        โ”‚    x     โ”‚       x        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Name          โ”‚ string             โ”‚  100   โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Description   โ”‚ string             โ”‚  500   โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Price         โ”‚ decimal            โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚ x  โ”‚ CategoryId    โ”‚ EntityId           โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Dimensions    โ”‚ ValueObject        โ”‚        โ”‚          โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Status        โ”‚ Enum               โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚ x  โ”‚ Images        โ”‚ List โ”‚        โ”‚          โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3.1 Product ๅ†…ใง ProductImage ใ‚’่จญๅฎšใ™ใ‚‹

ใ“ใฎใ‚ทใƒŠใƒชใ‚ชใงใฏใ€ProductImage ใฏๅˆฅใ‚ณใƒžใƒณใƒ‰ใงใฏไฝœๆˆใ—ใพใ›ใ‚“ใ€‚Product ใฎ็ทจ้›†ไธญใซ Images collection ใฎ้ …็›ฎใจใ—ใฆ่จญๅฎšใ•ใ‚Œใ€ๆฌกใฎๆง‹้€ ใ‚’ๆŒใกใพใ™:

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PK โ”‚ FK โ”‚ Property name โ”‚ Type           โ”‚ Length โ”‚ Required โ”‚ Auto-increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ x  โ”‚    โ”‚ Id            โ”‚ Guid           โ”‚        โ”‚    x     โ”‚       x        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚ x  โ”‚ ProductId     โ”‚ EntityId       โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ UploadDate    โ”‚ DateTimeOffset โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Image         โ”‚ File           โ”‚        โ”‚    x     โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆณจ: lino entity new ใ‚ณใƒžใƒณใƒ‰ใฏใ€ๅˆฅใฎใ‚ทใƒŠใƒชใ‚ชใง็‹ฌ็ซ‹ใ—ใŸ entities ใ‚’ไฝœๆˆใ™ใ‚‹ใŸใ‚ใซ็”จๆ„ใ•ใ‚Œใฆใ„ใพใ™ใ€‚ๆ—ขๅญ˜ aggregate ใฎ็ทจ้›†ใซๅซใพใ‚Œใชใ„ entity ใ‚’ไฝœๆˆใ™ใ‚‹ๅ ดๅˆใฏใ€ๆฌกใ‚’ไฝฟ็”จใ—ใพใ™:

lino entity new --service <ServiceName> --module <ModuleName> --name <EntityName>

4. ไป–ใฎใ‚ตใƒผใƒ“ใ‚นใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎไฝœๆˆ

ใ‚ตใƒผใƒ“ใ‚นไธญ Salesใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ—ใพใ™ ProductSnapshotใ€็ตฑๅˆใ‚คใƒ™ใƒณใƒˆใซใ‚ˆใฃใฆไพ›็ตฆใ•ใ‚Œใพใ™ใ€‚ ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎๅ…ƒใฎ ID ใจใ—ใฆ Product ใ‚ตใƒผใƒ“ใ‚นใ‹ใ‚‰ๆฅใฆใ„ใพใ™ Catalogใ€ใ“ใ“ใงใฏ่‡ชๅ‹•ๅข—ๅˆ†ใฏใงใใพใ›ใ‚“ใ€‚

lino entity new --service Sales --name ProductSnapshot
โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PK โ”‚ FK โ”‚ Property name โ”‚ Type    โ”‚ Length โ”‚ Required โ”‚ Auto-increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ x  โ”‚    โ”‚ Id            โ”‚ Guid    โ”‚        โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Name          โ”‚ string  โ”‚  100   โ”‚    x     โ”‚                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    โ”‚    โ”‚ Price         โ”‚ decimal โ”‚        โ”‚    x     โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆณจ: Sales ใ‚ตใƒผใƒ“ใ‚นใฎ ProductSnapshot ใซใฏใ€ๅฟ…่ฆๆœ€ๅฐ้™ใฎ fields ใฎใฟใ‚’่ค‡่ฃฝใ—ใฆใ„ใพใ™ใ€‚Customerใ€Orderใ€StockItem ใชใฉใฎ่ฃœๅŠฉ็š„ใช entities ใฏใ€ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’็ฐกๆฝ”ใซใ™ใ‚‹ใŸใ‚ใ“ใ“ใงใฏ่ฉณ่ฟฐใ—ใพใ›ใ‚“ใ€‚ProductSnapshot ใฏ shadow entity ใจใ—ใฆๆฉŸ่ƒฝใ—ใพใ™ใ€‚ใคใพใ‚Šใ€ๆ‰€ๆœ‰ๅ…ƒใŒๅˆฅใฎใ‚ตใƒผใƒ“ใ‚นใซใ‚ใ‚‹ใƒ‡ใƒผใ‚ฟใฎใ€ใƒญใƒผใ‚ซใƒซใงๆœ€ๅฐ้™ใ‹ใคๅˆถๅพกใ•ใ‚ŒใŸใ‚ณใƒ”ใƒผใงใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Š Sales ใฏใ€Catalog ใฎ entity ใ‚„ database ใซ็›ดๆŽฅไพๅญ˜ใ›ใšใ€ๅฟ…่ฆใช่ฃฝๅ“ใƒ‡ใƒผใ‚ฟใ‚’ๅ‚็…งใงใใพใ™ใ€‚

ใ“ใฎ็จฎ้กžใฎๆง‹้€ ใฏใ€lino shadow-entity new ใฎใ‚จใ‚คใƒชใ‚ขใ‚นใงใ‚ใ‚‹ lino shadow new ใ‚ณใƒžใƒณใƒ‰ใงใ‚‚ไฝœๆˆใงใใพใ™ใ€‚ใ“ใฎๆตใ‚Œใงใฏใ€Lino ใŒๅˆฅใฎ service ใพใŸใฏ module ใฎ entity ๆง‹้€ ใ‚’ใ‚ณใƒ”ใƒผใ—ใ€ๅˆฉ็”จๅดใฎ context ใซๅฟ…่ฆใช properties ใ ใ‘ใ‚’้ธๆŠžใงใใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚

lino shadow new --service <ServiceName> --module <ModuleName> --name <ShadowEntityName>

ใ“ใฎไพ‹ใงใฏใ€ๅ…ƒใฎ entity ใฏ Catalog.Merchandising.Product ใงใ€ๅฎ›ๅ…ˆใฏ Sales ใ‚ตใƒผใƒ“ใ‚นใงใ™ใ€‚่ฒฉๅฃฒใซๅฟ…่ฆใช fields ใฎใฟใ‚’ไฟๆŒใ—ใพใ™ใ€‚

ใ‚คใƒ™ใƒณใƒˆใจใใฎใƒใƒณใƒ‰ใƒฉใƒผใฎไฝœๆˆ

่ฆ็ด„ใ™ใ‚‹ใจใ€ๅ‰ใฎใƒˆใƒ”ใƒƒใ‚ฏใงใฏใƒขใ‚ธใƒฅใƒผใƒซๅผใ‚ตใƒผใƒ“ใ‚นใ‚’ไฝœๆˆใ—ใพใ—ใŸ Catalog.Merchandising ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ Productใ€ Category ใใ—ใฆ ProductImageใ€ๅ‹คๅ‹™ไธญ Sales ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ—ใพใ™ ProductSnapshotใ€‚

ๆฌกใซใ€ใƒ‰ใƒกใ‚คใƒณ ใ‚คใƒ™ใƒณใƒˆใจ็ตฑๅˆใ‚คใƒ™ใƒณใƒˆใ‚’ไฝœๆˆใ—ใพใ—ใ‚‡ใ†ใ€‚็›ฎ็š„ใฏใ€ใ‚ตใƒผใƒ“ใ‚นไธŠใง่ฃฝๅ“ใ‚’ไฝœๆˆใพใŸใฏๆ›ดๆ–ฐใ™ใ‚‹ใจใใซใ€ Catalogใ€ใ“ใ‚Œใ‚‰ใฎๅค‰ๆ›ดใฏใ€ๆฌกใฎใ‚ˆใ†ใชใ‚ณใƒณใ‚ทใƒฅใƒผใƒž ใ‚ตใƒผใƒ“ใ‚นใซใƒฌใƒ—ใƒชใ‚ฑใƒผใƒˆใ•ใ‚Œใพใ™ใ€‚ Sales ใใ—ใฆ Stockใ€‚

1. ใƒ‰ใƒกใ‚คใƒณใ‚คใƒ™ใƒณใƒˆใฎไฝœๆˆ

ๆœ€ๅˆใฎใ‚นใƒ†ใƒƒใƒ—ใฏใƒ‰ใƒกใ‚คใƒณ ใ‚คใƒ™ใƒณใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใงใ™ ProductCreated ใใ—ใฆ ProductUpdated ใ‚ณใƒžใƒณใƒ‰ใ‚’ไฝฟ็”จใ—ใฆ:

lino event new

ไฝœๆˆไธญใซใ€ใ‚คใƒ™ใƒณใƒˆใ‚’ใƒใƒณใƒ‰ใƒฉใƒผใซ้–ข้€ฃไป˜ใ‘ใ€ๅŒๆ™‚ใซ็ตฑๅˆใ‚คใƒ™ใƒณใƒˆใฎ่ตทๅ‹•ใ‚’ๆง‹ๆˆใงใใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ๅฟ…่ฆใชใ™ในใฆใฎใƒ•ใƒญใƒผใฎไฝœๆˆใŒ้›†ไธญๅŒ–ใ•ใ‚Œใพใ™ใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Question                                             โ”‚ Answer                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a service:                                    โ”‚ Catalog                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a module:                                     โ”‚ Merchandising                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a entity:                                     โ”‚ Product                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event type:                               โ”‚ Domain Event                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Enter the name of the event:                         โ”‚ ProductCreated                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Do you want to create an associated event handler?   โ”‚ Yes                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Trigger a integration event?                         โ”‚ Yes                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Choose the integration event to be triggered:        โ”‚ (Create new integration event) โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Enter the name of the event:                         โ”‚ ProductCreated                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Which model will be used for this integration event? โ”‚ Creation model                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅŒๆง˜ใซใ‚คใƒ™ใƒณใƒˆใ‚’ไฝœๆˆใ—ใพใ™ ProductUpdated:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Question                                             โ”‚ Answer                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a service:                                    โ”‚ Catalog                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a module:                                     โ”‚ Merchandising                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a entity:                                     โ”‚ Product                        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event type:                               โ”‚ Domain Event                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Enter the name of the event:                         โ”‚ ProductUpdated                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Do you want to create an associated event handler?   โ”‚ Yes                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Trigger a integration event?                         โ”‚ Yes                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Choose the integration event to be triggered:        โ”‚ (Create new integration event) โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Enter the name of the event:                         โ”‚ ProductUpdated                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Which model will be used for this integration event? โ”‚ Update model                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ๆฌกใฎใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚

2. ็ตฑๅˆใ‚คใƒ™ใƒณใƒˆใƒใƒณใƒ‰ใƒฉใƒผใฎไฝœๆˆ

ๆฌกใฎใ‚นใƒ†ใƒƒใƒ—ใฏใ€ใฉใฎใ‚ตใƒผใƒ“ใ‚นใŒ็ตฑๅˆใ‚คใƒ™ใƒณใƒˆใ‚’ๆถˆ่ฒปใ™ใ‚‹ใ‹ใ‚’ๅฎš็พฉใ™ใ‚‹ใ“ใจใงใ™ใ€‚ใ“ใ‚Œใ‚’่กŒใ†ใซใฏใ€ไปฅไธ‹ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚

lino event-handler new

ไฝœๆˆใƒ•ใƒญใƒผใซใฏๆฌกใฎใ‚‚ใฎใŒๅซใพใ‚Œใพใ™ใ€‚

ใŸใจใˆใฐใ€ใ‚ตใƒผใƒ“ใ‚นใงใฏ Sales ใƒใƒณใƒ‰ใƒฉใƒผใ‚’ไฝœๆˆใ—ใพใ—ใŸ ProductCreated ใใ—ใฆ ProductUpdated ใ“ใ‚Œใซใ‚ˆใ‚Šใƒˆใƒชใ‚ฌใƒผใ•ใ‚ŒใŸใ‚คใƒ™ใƒณใƒˆใŒๆถˆ่ฒปใ•ใ‚Œใพใ™ใ€‚ Catalog.Merchandising.Product:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Question                                   โ”‚ Answer            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a service:                          โ”‚ Sales             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a entity:                           โ”‚ ProductSnapshot   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event type:                     โ”‚ Integration Event โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event's service to be consumed: โ”‚ Catalog           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event's module to be consumed:  โ”‚ Merchandising     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event's entity to be consumed:  โ”‚ Product           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Choose the event to be consumed:           โ”‚ ProductCreated    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Enter the name of the event handler:       โ”‚ ProductCreated    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Question                                   โ”‚ Answer            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a service:                          โ”‚ Sales             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a entity:                           โ”‚ ProductSnapshot   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event type:                     โ”‚ Integration Event โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event's service to be consumed: โ”‚ Catalog           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event's module to be consumed:  โ”‚ Merchandising     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select the event's entity to be consumed:  โ”‚ Product           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Choose the event to be consumed:           โ”‚ ProductUpdated    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Enter the name of the event handler:       โ”‚ ProductUpdated    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

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

Web ใƒšใƒผใ‚ธใ€APIใ€ใ‚ณใƒžใƒณใƒ‰ใŠใ‚ˆใณใ‚ฏใ‚จใƒชใฎ็”Ÿๆˆ

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

lino page new

ใ“ใฎใƒ—ใƒญใ‚ปใ‚นใงใฏใ€ๆฌกใฎใ“ใจใ‚’่กŒใ„ใพใ™ใ€‚

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

ใ“ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใฏใ€ๆฌกใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎ็ตฑๅˆใƒšใƒผใ‚ธใ‚’็”Ÿๆˆใงใใพใ™ใ€‚

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

็งป่กŒใฎไฝœๆˆใจ้ฉ็”จ

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

ใ‚ถ Lino CLI ใฏใ€ใ“ใฎใƒ—ใƒญใ‚ปใ‚นใ‚’ Entity Framework ใจ่ชฟๆ•ดใ—ใ€ๆญฃใ—ใ„ใ‚ตใƒผใƒ“ใ‚น/ใƒขใ‚ธใƒฅใƒผใƒซใ‚’้ธๆŠžใ—ใ€ใ‚ตใƒผใƒ“ใ‚นใฎ็พๅœจใฎใƒใƒผใ‚ธใƒงใƒณใ‚’ไฝฟ็”จใ—ใ€็”Ÿๆˆใ•ใ‚ŒใŸใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚’ๆ•ด็†ใ—ใฆใƒˆใƒฌใƒผใ‚ตใƒ“ใƒชใƒ†ใ‚ฃใ‚’ๅฎนๆ˜“ใซใ—ใพใ™ใ€‚

ใ‚นใƒ†ใƒƒใƒ— 1: ็งป่กŒใฎไฝœๆˆ

ๆ–ฐใ—ใ„็งป่กŒใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€ๆฌกใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚

lino database migrations add

ใ“ใฎใ‚ณใƒžใƒณใƒ‰ใฏใ€ๆฌกใฎใ‚ˆใ†ใชใ‚จใ‚คใƒชใ‚ขใ‚นใ‚‚ๅ—ใ‘ๅ…ฅใ‚Œใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ lino database migrations new ใใ—ใฆ lino database migrations createใงใ™ใŒใ€ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใงๆŽจๅฅจใ•ใ‚Œใฆใ„ใ‚‹ๆ–นๆณ•ใฏๆฌกใฎใจใŠใ‚Šใงใ™ใ€‚ addใ€‚

ๅฎŸ่กŒไธญใซใ€ๆฌกใฎใ“ใจใ‚’้€š็Ÿฅใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Question                                  โ”‚ Answer            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a service:                         โ”‚ Catalog           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Select a module:                          โ”‚ Merchandising     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Current version of the service:           โ”‚ 0.1.0             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Provide a description for this migration: โ”‚ Initial migration โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚ตใƒผใƒ“ใ‚นใจใƒขใ‚ธใƒฅใƒผใƒซใ‚’ใ™ใงใซ็Ÿฅใฃใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ใ“ใฎใƒ‡ใƒผใ‚ฟใ‚’็›ดๆŽฅๅ…ฅๅŠ›ใงใใพใ™ใ€‚

lino database migrations add --service <ServiceName> --module <ModuleName>

ใ‚นใƒ†ใƒƒใƒ— 2: ็”Ÿๆˆใ•ใ‚Œใ‚‹ใ‚‚ใฎ

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

ใ‚นใƒ†ใƒƒใƒ— 3: ็งป่กŒใฎใƒชใ‚นใƒˆใจ้ฉ็”จ

ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซๅค‰ๆ›ดใ‚’้ฉ็”จใ™ใ‚‹ๅ‰ใซใ€ๆ—ข็Ÿฅใฎ็งป่กŒใ‚’ใƒชใ‚นใƒˆใ—ใ€ไบˆๆƒณใ•ใ‚Œใ‚‹็งป่กŒใŒๅญ˜ๅœจใ™ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใพใ™ใ€‚

lino database migrations list --service <ServiceName> --module <ModuleName>

ๆง‹ๆˆใ•ใ‚ŒใŸ็’ฐๅขƒใซ็งป่กŒใ‚’้ฉ็”จใ™ใ‚‹ใซใฏ:

lino database migrations apply --service <ServiceName> --module <ModuleName>

ใƒญใƒผใ‚ซใƒซ้–‹็™บใงใฏใ€ใ“ใฎใƒ•ใƒญใƒผใซใ‚ˆใ‚Šใƒขใƒ‡ใƒซใฎๆคœ่จผใŒ้ซ˜้€ŸๅŒ–ใ•ใ‚Œใพใ™ใ€‚ๅ…ฑๆœ‰็’ฐๅขƒใพใŸใฏ้‹็”จ็’ฐๅขƒใงใฏใ€ใƒใƒผใƒ ใŒๅฎš็พฉใ—ใŸๅฑ•้–‹ใƒ—ใƒญใ‚ปใ‚นใ‚’้€šใ˜ใฆ็งป่กŒใ‚’้ฉ็”จใ—ใ€ๅฟ…่ฆใซๅฟœใ˜ใฆใ‚นใ‚ฏใƒชใƒ—ใƒˆใฎใƒฌใƒ“ใƒฅใƒผใ€ๆ‰ฟ่ชใ€ใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—ใ‚’่กŒใ„ใพใ™ใ€‚

ใ‚นใƒ†ใƒƒใƒ— 4: ๅˆถๅพกใ•ใ‚ŒใŸ็’ฐๅขƒใงๅ…ƒใซๆˆปใ™ใ‹ๅ‰Š้™คใ™ใ‚‹

ไฝฟ็”จ revert ๅˆถๅพกใ•ใ‚ŒใŸ็’ฐๅขƒใง้ฉ็”จใ•ใ‚ŒใŸ็งป่กŒใ‚’ๆˆปใ™ๅฟ…่ฆใŒใ‚ใ‚‹ๅ ดๅˆใฏใ€็งป่กŒใฎๅ†…ๅฎนใซใ‚ˆใฃใฆใฏๆ“ไฝœใง็ ดๅฃŠ็š„ใชใ‚ณใƒžใƒณใƒ‰ใŒๅฎŸ่กŒใ•ใ‚Œใ‚‹ๅฏ่ƒฝๆ€งใŒใ‚ใ‚‹ใ“ใจใ‚’็†่งฃใ—ใฆใใ ใ•ใ„ใ€‚

lino database migrations revert --service <ServiceName> --module <ModuleName>

ไฝฟ็”จ remove ้€šๅธธใ€ๅค‰ๆ›ดใ‚’ใ‚ณใƒŸใƒƒใƒˆใพใŸใฏๅ…ฌ้–‹ใ™ใ‚‹ๅ‰ใซใ€ใ‚ณใƒŸใƒƒใƒˆใ•ใ‚Œใฆใ„ใชใ„ๆœ€ๅพŒใฎ็งป่กŒใ‚’็ ดๆฃ„ใ—ใพใ™ใ€‚

lino database migrations remove --service <ServiceName> --module <ModuleName>

่‰ฏใ„็ฟ’ๆ…ฃ

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

ใ‚นใƒ†ใƒƒใƒ— 5: ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ใƒญใƒผใ‚ซใƒซใงๆคœ่จผใ™ใ‚‹

projectใ€Web Appใ€servicesใ€modulesใ€entitiesใ€migrationsใ€APIsใ€Commandsใ€Queries ใŒๆƒใฃใŸใ‚‰ใ€Docker images ใ‚’็”Ÿๆˆใ™ใ‚‹ๅ‰ใซใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ๆคœ่จผใ—ใพใ™ใ€‚ใพใš solution ใ‚’ใƒ“ใƒซใƒ‰ใ—ใ€็”Ÿๆˆใ•ใ‚ŒใŸใ™ในใฆใฎ projectsใ€contractsใ€clients ใŒๆ•ดๅˆใ—ใฆใ„ใ‚‹ใ“ใจใ‚’็ขบ่ชใ—ใพใ™:

dotnet build

ๆฌกใซใ€Aspire ใฎ AppHost ใ‹ใ‚‰ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ๅฎŸ่กŒใ—ใพใ™:

dotnet run --project src/Aspire/AppHost/<ProjectName>.AppHost.csproj

Aspire dashboard ใ‚’ไฝฟใฃใฆใ€APIsใ€Web Appใ€databaseใ€cacheใ€messagingใ€Background Jobs ใŒๆญฃใ—ใ่ตทๅ‹•ใ—ใŸใ‹็ขบ่ชใ—ใพใ™ใ€‚ใใฎๅพŒใ€Backoffice ใงไธป่ฆใช flows ใ‚’ใƒ†ใ‚นใƒˆใ—ใพใ™ใ€‚็”Ÿๆˆใ•ใ‚ŒใŸ pagesใ€Blazor ใ‹ใ‚‰ Api.Client projects ใธใฎๅ‘ผใณๅ‡บใ—ใ€้ฉ็”จๆธˆใฟ migrationsใ€ๆœ‰ๅŠนๅŒ–ใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใฎ authenticationใ€ใ‚ทใƒŠใƒชใ‚ชใซๅซใพใ‚Œใ‚‹ events ใพใŸใฏ jobs ใ‚’็ขบ่ชใ—ใพใ™ใ€‚

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใŒใƒ“ใƒซใƒ‰ใงใใ€ใƒญใƒผใ‚ซใƒซใงๅฎŸ่กŒใงใใ€ไธป่ฆใช flows ใŒๆคœ่จผใงใใŸใ‚‰ใ€project ใฏใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใƒณใ‚ฐๆฎต้šŽใซ้€ฒใ‚€ๆบ–ๅ‚™ใŒใงใใฆใ„ใพใ™ใ€‚

Docker ใ‚คใƒกใƒผใ‚ธใฎ็”Ÿๆˆ

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใŒใƒ“ใƒซใƒ‰ใงใใ€AppHost ใ‹ใ‚‰ใƒญใƒผใ‚ซใƒซๅฎŸ่กŒใ•ใ‚Œใ€ไธป่ฆใช flows ใŒใƒ†ใ‚นใƒˆๆธˆใฟใซใชใฃใŸใ‚‰ใ€services ใจ Web applications ใฎ Docker images ใ‚’็”Ÿๆˆใ—ใ€ๅพŒใง container registry ใซๅ…ฌ้–‹ใงใใพใ™ใ€‚ ้ธๆŠžใ—ใŸ้ …็›ฎใ‚’ images ใจใ—ใฆใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใƒณใ‚ฐใ™ใ‚‹ๆบ–ๅ‚™ใŒใงใใŸใ‚‰ใ€lino build ใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚

ใ‚ถ Lino CLI ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ไฝฟ็”จใ—ใฆใ“ใฎใƒ—ใƒญใ‚ปใ‚นใ‚’็ฐก็•ฅๅŒ–ใ—ใพใ™ใ€‚

lino build

ๅฎŸ่กŒใ™ใ‚‹ใจใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงๅˆฉ็”จๅฏ่ƒฝใชใ™ในใฆใฎใ‚ตใƒผใƒ“ใ‚นใจ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎใƒชใ‚นใƒˆใŒใ€ใใ‚Œใ‚‰ใฎ็พๅœจใฎใƒใƒผใ‚ธใƒงใƒณใจใจใ‚‚ใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚

Select the services or web applications you want to include in the build:

> [ ] Services
    [ ] Catalog |0.1.0|
    [ ] Sales |0.1.0|
    [ ] Security |0.1.0|
    [ ] Stock |0.1.0|
  [ ] Web applications
    [ ] Backoffice |0.1.0|

1 ใคไปฅไธŠใฎใ‚ตใƒผใƒ“ใ‚นใจ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’้ธๆŠžใ—ใฆใ€ใ‚คใƒกใƒผใ‚ธใ‚’ๅŒๆ™‚ใซ็”Ÿๆˆใงใใพใ™ใ€‚ๅธŒๆœ›ใฎ้ …็›ฎใซใƒใ‚งใƒƒใ‚ฏใ‚’ๅ…ฅใ‚Œใ‚‹ใ ใ‘ใงใ™ใ€‚

ๆฌกใซใ€็”Ÿๆˆใ•ใ‚ŒใŸใ‚คใƒกใƒผใ‚ธใฎใƒใƒผใ‚ธใƒงใƒณใ‚’ๆ›ดๆ–ฐใ™ใ‚‹ๆ–นๆณ•ใ‚’้ธๆŠžใ™ใ‚‹ใ‚ˆใ†ๆฑ‚ใ‚ใ‚‰ใ‚Œใพใ™ใ€‚ไฝฟ็”จๅฏ่ƒฝใชใ‚ชใƒ—ใ‚ทใƒงใƒณใฏๆฌกใฎใจใŠใ‚Šใงใ™ใ€‚

ใ‚ตใƒผใƒ“ใ‚นใ‚’้ธๆŠžใ—ใ€ใƒใƒผใ‚ธใƒงใƒณใฎๅข—ๅˆ†ใ‚’ๅฎš็พฉใ—ใŸๅพŒใ€ Lino CLI ๅฎŸ่กŒใ—ใพใ™:

ใƒ—ใƒญใ‚ปใ‚นใฎๆœ€ๅพŒใซใ€ใ™ในใฆใฎ Web ใ‚ตใƒผใƒ“ใ‚นใจใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใŒ้ธๆŠžใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’่€ƒๆ…ฎใ™ใ‚‹ใจใ€็”Ÿๆˆใ•ใ‚ŒใŸใ‚คใƒกใƒผใ‚ธใฏๆฌกใฎๆง‹้€ ใซใชใ‚Šใพใ™ใ€‚

ไธ€่ˆฌ็š„ใซใ€ๅ˜็ด”ใชใ‚ตใƒผใƒ“ใ‚นใฏๆฌกใฎใ‚ˆใ†ใชใƒชใƒใ‚ธใƒˆใƒชใ‚’็”Ÿๆˆใ™ใ‚‹ๅ‚พๅ‘ใŒใ‚ใ‚Šใพใ™ใ€‚ project-name/services/service-name-api:1.2.3ใ€ใƒขใ‚ธใƒฅใƒฉใƒผ ใ‚ตใƒผใƒ“ใ‚นใฏใƒ›ใ‚นใƒˆใ‚’ๆฌกใฎใ‚ˆใ†ใซไฝฟ็”จใ—ใพใ™ใ€‚ project-name/services/service-name-host:1.2.3ใ€ใŠใ‚ˆใณ Blazor ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฏๆฌกใฎใ‚ˆใ†ใชใƒ‘ใ‚นใ‚’ไฝฟ็”จใ—ใพใ™ใ€‚ project-name/webapps/webapp-name:1.2.3ใ€‚

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

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงใฎใƒใƒผใ‚ธใƒงใƒณใฎไฝœๆˆ

Lino ใฏใ€ๅ„ใ‚ตใƒผใƒ“ใ‚นใฎ้‹็”จใƒใƒผใ‚ธใƒงใƒณใ‚’็ถญๆŒใ—ใพใ™ใ€‚ src/Services/<ServiceName>/version.txt ใŠใ‚ˆใณๅ„ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ src/WebApps/<WebAppName>/version.txtใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ๅฑ•้–‹ๅฏ่ƒฝใชใ‚ขใ‚คใƒ†ใƒ ใ”ใจใซ็‹ฌ็ซ‹ใ—ใŸใƒชใƒชใƒผใ‚นใ‚’่จˆ็”ปใงใใพใ™ใ€‚

ใƒใƒผใ‚ธใƒงใƒณใ‚’ๅค‰ๆ›ดใ™ใ‚‹ๅ‰ใซใ€็พๅœจใฎ็Šถๆ…‹ใ‚’ๆคœๆŸปใ—ใฆใใ ใ•ใ„ใ€‚

lino version list

ไฝฟ็”จ lino version show ็‰นๅฎšใฎใ‚ตใƒผใƒ“ใ‚นใพใŸใฏ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ๅ‚็…งใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ๅ ดๅˆใ€‚

Web ใ‚ตใƒผใƒ“ใ‚นใพใŸใฏใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎๆ–ฐใ—ใ„ใƒใƒผใ‚ธใƒงใƒณใฎ่ฟฝๅŠ ใฏใ€ใ‚ทใƒณใƒ—ใƒซใ‹ใค้›†ไธญๅŒ–ใ•ใ‚ŒใŸใƒ—ใƒญใ‚ปใ‚นใงใ™ใ€‚ Lino CLIใ€‚ๆฌกใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใ ใ‘ใงใ™ใ€‚

lino version bump

Docker ใ‚คใƒกใƒผใ‚ธใ‚’็”Ÿๆˆใ™ใ‚‹ใฎใจๅŒใ˜ใ‚ˆใ†ใซใ€ใ“ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ†…ใฎใ™ในใฆใฎใ‚ตใƒผใƒ“ใ‚นใจ Web ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎๅฎŒๅ…จใชใƒชใ‚นใƒˆใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ ้ธๆŠžใ—ใŸ้ …็›ฎใฎใฟใƒใƒผใ‚ธใƒงใƒณใŒไธŠใŒใ‚Šใ€ๆฎ‹ใ‚Šใฎ้ …็›ฎใฏๅค‰ๆ›ดใ•ใ‚Œใพใ›ใ‚“ใ€‚

Select the services or web applications that will have version changes:

> [ ] Services
    [ ] Catalog |0.1.0|
    [ ] Sales |0.1.0|
    [ ] Security |0.1.0|
    [ ] Stock |0.1.0|
  [ ] Web applications
    [ ] Backoffice |0.1.0|

ๅฟ…่ฆใช้ …็›ฎใ‚’้ธๆŠžใ—ใŸๅพŒใ€ใƒใƒผใ‚ธใƒงใƒณๅข—ๅˆ†ใฎใ‚ฟใ‚คใƒ—ใ‚’้ธๆŠžใ™ใ‚‹ใ‚ˆใ†ๆฑ‚ใ‚ใ‚‰ใ‚Œใพใ™ใ€‚ไฝฟ็”จๅฏ่ƒฝใชใ‚ชใƒ—ใ‚ทใƒงใƒณใฏๆฌกใฎใจใŠใ‚Šใงใ™ใ€‚

Web ใ‚ตใƒผใƒ“ใ‚นใจใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎใƒใƒผใ‚ธใƒงใƒณใŒไปฅไธ‹ใซ็›ดๆŽฅๅฝฑ้Ÿฟใ™ใ‚‹ใ“ใจใ‚’ๅผท่ชฟใ™ใ‚‹ใ“ใจใŒ้‡่ฆใงใ™ใ€‚

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

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

็งใŸใกใฎใƒใƒฃใƒณใƒใƒซใ‚’ใƒ•ใ‚ฉใƒญใƒผใ™ใ‚‹ใ“ใจใ‚’ๅฟ˜ใ‚Œใชใ„ใงใใ ใ•ใ„ YouTube ็ฐกๅ˜ใชๆ“ไฝœใ‹ใ‚‰้ซ˜ๅบฆใชๆฉŸ่ƒฝใพใงใ€ใƒ„ใƒผใƒซใ‚’ไฝฟ็”จใ™ใ‚‹ใŸใ‚ใฎ่ฉณ็ดฐใชใƒใƒฅใƒผใƒˆใƒชใ‚ขใƒซใ€ๅฎŸ็”จ็š„ใชใƒ‡ใƒขใƒณใ‚นใƒˆใƒฌใƒผใ‚ทใƒงใƒณใ€ใƒ’ใƒณใƒˆใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚

処理されていないエラーが発生しました。 再読み込み ๐Ÿ—™