从零到构建:逐步指南

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


็›ฎๆ ‡ๆ˜ฏไปฅ้›†ๆˆ็š„ๆ–นๅผๅฑ•็คบ CLI ๅ‘ฝไปคๅฆ‚ไฝ•่žๅ…ฅๅฎž้™…ๅผ€ๅ‘ๆต็จ‹โ€”โ€”ไธไป…ไป…ๆ˜ฏๅˆ—ๅ‡บๅ‘ฝไปค๏ผŒ่€Œๆ˜ฏ่งฃ้‡Šๆฏไธช้€‰ๆ‹ฉ็š„ๅŽŸๅ› ใ€่‡ชๅŠจ็”Ÿๆˆ็š„ๅ†…ๅฎนไปฅๅŠๆžถๆž„ไธŠ็š„ๅฝฑๅ“ใ€‚


ๅณไฝฟๆฏไธชๅ‘ฝไปค้ƒฝๆœ‰็‰นๅฎš็š„ๆ–‡ๆกฃ๏ผŒ่ฟ™้‡Œไฝ ๅฐ†็œ‹ๅˆฐ ็ซฏๅˆฐ็ซฏ ็š„ๆต็จ‹โ€”โ€”ไธ€ไธชๅฏ้‡ๅค็š„ๆญฅ้ชค๏ผŒ่Š‚็œๅคง้‡้‡ๅคๅทฅไฝœๆ—ถ้—ด๏ผŒๅนถๅธฎๅŠฉไฟๆŒไปฃ็ ไธ€่‡ดๆ€งๅ’Œๅฏๆต‹่ฏ•ๆ€งใ€‚


ๅœจๆ•ดไธชๆŒ‡ๅ—ไธญ๏ผŒๆˆ‘ไปฌๅฐ†่งฃ้‡Š Lino ๅบ”็”จ็š„ๆŠ€ๆœฏๆฆ‚ๅฟต๏ผˆไพ‹ๅฆ‚๏ผšCQRSใ€TypedResultsใ€Source Generatorsใ€Outbox Pattern๏ผ‰๏ผŒๅฑ•็คบๅ‘ฝไปค็คบไพ‹๏ผŒๅนถๆไพ›็‰ˆๆœฌ็ฎก็†ใ€้ƒจ็ฝฒๅ’ŒๆŒ็ปญ้›†ๆˆ็š„ๆœ€ไฝณๅฎž่ทตใ€‚

ๅฎ‰่ฃ…ๅ’Œ้…็ฝฎ Lino CLI

ไฝฟ็”จ Lino CLI ๅผ€ๅง‹ๅทฅไฝœ็š„็ฌฌไธ€ๆญฅๆ˜ฏๅœจๅผ€ๅ‘็Žฏๅขƒไธญๅฎ‰่ฃ…่ฏฅๅทฅๅ…ทใ€‚ ๅฎƒไฝœไธบ dotnet ๅ…จๅฑ€ๅทฅๅ…ท ๅ‘ๅธƒ๏ผŒ่ฟ™ๆ„ๅ‘ณ็€ๅฎƒๅฐ†ๅœจๆ‚จ่ฎก็ฎ—ๆœบไธŠ็š„ไปปไฝ• .NET ้กน็›ฎไธญๅฏ็”จใ€‚

ๆญฅ้ชค 1๏ผšๅฎ‰่ฃ…

่ฆๅฎ‰่ฃ…๏ผˆๆˆ–ๆ›ดๆ–ฐ๏ผ‰Lino CLI๏ผŒ่ฏทๅœจ็ปˆ็ซฏไธญๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš

dotnet tool install --global Tolitech.Lino

้‡่ฆๆณจๆ„ไบ‹้กน๏ผš

  • ๅฆ‚ๆžœๅทฒ็ปๅฎ‰่ฃ…ไบ†ๆŸไธช็‰ˆๆœฌ๏ผŒๅฏไปฅไฝฟ็”จ dotnet tool update --global Tolitech.Lino ่ฟ›่กŒๆ›ดๆ–ฐใ€‚
  • ่ฏท็กฎไฟ .NET ๅ…จๅฑ€ๅทฅๅ…ท็›ฎๅฝ•ๅœจ็ณป็ปŸ็š„ PATH ไธญ๏ผŒไปฅไพฟ lino ๅ‘ฝไปค่ƒฝๅคŸๆญฃๅธธ่ฟ่กŒใ€‚

ๆญฅ้ชค 2๏ผš้…็ฝฎ่ฏญ่จ€

ๅฎ‰่ฃ…ๅฎŒๆˆๅŽ๏ผŒๅปบ่ฎฎ้…็ฝฎ CLI ๅœจๆถˆๆฏใ€ๆ็คบๅ’Œๆ—ฅๅฟ—ไธญไฝฟ็”จ็š„่ฏญ่จ€๏ผˆๆˆ–ๆ–‡ๅŒ–๏ผ‰๏ผš

lino preferences culture set

็ณป็ปŸไผšๆ็คบๆ‚จ้€‰ๆ‹ฉๅฏ็”จ่ฏญ่จ€ใ€‚ๆญค่ฎพ็ฝฎ็กฎไฟๆ‰€ๆœ‰ๆŒ‡ไปคๅ’Œๆ็คบไปฅๆ‰€้€‰่ฏญ่จ€ไธ€่‡ดๆ˜พ็คบใ€‚

ๆญฅ้ชค 3๏ผš่ฎค่ฏๅ’Œๆณจๅ†Œ

่ฆ่ฎฟ้—ฎ Lino ็š„ๆ‰€ๆœ‰ๅŠŸ่ƒฝ๏ผŒๅŒ…ๆ‹ฌ้ซ˜็บงๆจกๆฟใ€Docker ้•œๅƒๅ‘ๅธƒๅ’ŒไธŽๅค–้ƒจๆœๅŠก็š„้›†ๆˆ๏ผŒๅฟ…้กป่ฟ›่กŒ่ฎค่ฏใ€‚

- ๅฆ‚ๆžœๅฐšๆœชๆณจๅ†Œ๏ผŒ่ฏทไฝฟ็”จไปฅไธ‹ๅ‘ฝไปคๆณจๅ†Œ๏ผš

lino user register

- ๅฆ‚ๆžœๅทฒๆณจๅ†Œ๏ผŒ่ฏทไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค็™ปๅฝ•๏ผš

lino auth login

ๅ‘็”Ÿ็š„ๆƒ…ๅ†ต๏ผš CLI ไผšๅœจๆœฌๅœฐๅญ˜ๅ‚จไธ€ไธช่ฎค่ฏไปค็‰Œ๏ผŒไฝฟๆ‚จ่ƒฝๅคŸๆ‰ง่กŒ้œ€่ฆ่ฎฟ้—ฎๅ—ไฟๆŠค่ต„ๆบ็š„ๅ‘ฝไปค๏ผŒ่€Œๆ— ้œ€ๆฏๆฌก้ƒฝ็™ปๅฝ•ใ€‚

ๆญฅ้ชค 4๏ผš้ชŒ่ฏ

่ฆ็กฎ่ฎคๅฎ‰่ฃ…ๅ’Œ่ฎค่ฏๆ˜ฏๅฆๆˆๅŠŸ๏ผŒ่ฏทๆ‰ง่กŒ๏ผš

lino --version

ๅฆ‚ๆžœๅ‘ฝไปค่ฟ”ๅ›žๅทฒๅฎ‰่ฃ…็š„็‰ˆๆœฌ๏ผŒ่ฏดๆ˜Žๆ‚จๅทฒๅ‡†ๅค‡ๅฅฝๅœจ้กน็›ฎไธญไฝฟ็”จ Lino CLIใ€‚

ๅˆ›ๅปบ MyApp ้กน็›ฎ

ๅœจๆญคๆญฅ้ชคไธญ๏ผŒๆˆ‘ไปฌๅฐ†ไฝฟ็”จ Lino CLI ๅˆ›ๅปบ้กน็›ฎ็š„ๅˆๅง‹็ป“ๆž„ใ€‚ ่ฏฅ้กน็›ฎๅฐ†ไฝœไธบ็คบไพ‹๏ผŒ็”จไบŽๆผ”็คบๆœๅŠกใ€ๆจกๅ—ใ€ๅ‰็ซฏไปฅๅŠไบ‹ไปถ้›†ๆˆ็š„ๅˆ›ๅปบใ€‚

ๆญฅ้ชค 1๏ผšๆ‰ง่กŒๅˆ›ๅปบๅ‘ฝไปค

่ฆๅˆ›ๅปบไธ€ไธชๆ–ฐ้กน็›ฎ๏ผŒ่ฏทๅœจ็ปˆ็ซฏไธญ่ฟ่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš

lino project new

CLI ๅฐ†้€ๆญฅๅผ•ๅฏผๆ‚จ๏ผŒ่ฆๆฑ‚ๆไพ›ๅฆ‚ไธ‹ไฟกๆฏ๏ผš

  • ้กน็›ฎๅ็งฐ๏ผšๆˆ‘ไปฌๅฐ†ไฝฟ็”จ MyApp๏ผŒไฝ†ๆ‚จๅฏไปฅ้€‰ๆ‹ฉไปปๆ„ๅ็งฐ๏ผ›
  • ้™„ๅŠ ๅŠŸ่ƒฝ๏ผšไปฃ็ ๅˆ†ๆžๅ™จใ€ๅˆ†ๅธƒๅผ็ผ“ๅญ˜ใ€ๅผ‚ๆญฅไบ‹ไปถๆ”ฏๆŒ็ญ‰ใ€‚

ๆญฅ้ชค 2๏ผš้…็ฝฎๆ ธๅฟƒๅŠŸ่ƒฝ

ๅฏนไบŽๆญค้กน็›ฎ๏ผŒๆˆ‘ไปฌๅปบ่ฎฎไปŽไธ€ๅผ€ๅง‹ๅฐฑๅฏ็”จไปฅไธ‹ๅŠŸ่ƒฝ๏ผš

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

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

ๆญฅ้ชค 3๏ผš็”Ÿๆˆ็š„็ป“ๆž„

ๆ‰ง่กŒๅ‘ฝไปคๅนถ้…็ฝฎๅŠŸ่ƒฝๅŽ๏ผŒCLI ๅฐ†็”Ÿๆˆ้กน็›ฎ็š„ๅˆๅง‹็ป“ๆž„๏ผŒๅ…ถไธญๅŒ…ๆ‹ฌ๏ผš

  • ๆœๅŠกๅ’Œๆจกๅ—็š„ๆ–‡ไปถๅคน๏ผ›
  • ๅ‰็ซฏๆจกๆฟ๏ผˆๅฆ‚้€‚็”จ๏ผ‰๏ผ›
  • ็ผ“ๅญ˜ใ€ไบ‹ไปถๅ’Œ้›†ๆˆ็š„ๅˆๅง‹้…็ฝฎ๏ผ›
  • ๅฏ็ผ–่ฏ‘็š„่งฃๅ†ณๆ–นๆกˆๆ–‡ไปถ๏ผˆ.slnx๏ผ‰ๅ’Œ้กน็›ฎๆ–‡ไปถ๏ผˆ.csproj๏ผ‰ใ€‚

็Žฐๅœจ๏ผŒๆ‚จ็š„ MyApp ้กน็›ฎๅทฒๅ‡†ๅค‡ๅฅฝๆŽฅๆ”ถๅฐ†ๅœจๆŽฅไธ‹ๆฅ็š„ๆญฅ้ชคไธญ้…็ฝฎ็š„ๆœๅŠกใ€ๆจกๅ—ใ€ๅฎžไฝ“ๅ’Œๅ‰็ซฏใ€‚

ๆทปๅŠ ๅ‰็ซฏ

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

ๆญฅ้ชค 1๏ผš่ฟ่กŒๅˆ›ๅปบๅ‘ฝไปค

่ฆๅ‘้กน็›ฎๆทปๅŠ ไธ€ไธชๆ–ฐ็š„ๅ‰็ซฏ๏ผŒ่ฏทๅœจ็ปˆ็ซฏไธญไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค๏ผš

lino webapp new

CLI ๅœจ่ฟ‡็จ‹ไธญไผš่ฆๆฑ‚่พ“ๅ…ฅไธ€ไบ›ไฟกๆฏ๏ผŒไพ‹ๅฆ‚๏ผš

  • Web ๅบ”็”จๅ็งฐ๏ผšๅœจๆœฌ็คบไพ‹ไธญๆˆ‘ไปฌๅฐ†ไฝฟ็”จ Backoffice๏ผ›

ๆญฅ้ชค 2๏ผš็”Ÿๆˆ็š„็ป“ๆž„

ๅœจ่ฟ‡็จ‹็ป“ๆŸๆ—ถ๏ผŒCLI ๅฐ†ๅœจๆ–‡ไปถๅคน WebApps/Backoffice ไธญ็”Ÿๆˆๅ‰็ซฏ็š„ๅˆๅง‹็ป“ๆž„ใ€‚ ้ป˜่ฎค็ป“ๆž„ๅŒ…ๆ‹ฌ๏ผš

  • ็”จไบŽ้กต้ขใ€็ป„ไปถๅ’Œๅบ”็”จๆœๅŠก็š„ๆ–‡ไปถๅคน๏ผ›
  • ็”จไบŽๆถˆ่ดน้กน็›ฎๆœๅŠก API ็š„ HTTP ๅฎขๆˆท็ซฏ๏ผ›
  • ๅˆๅง‹ๆจกๆฟ๏ผ›
  • ไธŽ่บซไปฝ้ชŒ่ฏใ€ๆŽˆๆƒๅ’Œ็ณป็ปŸไบ‹ไปถ้›†ๆˆ็š„้…็ฝฎๆ–‡ไปถใ€‚

้‡่ฆ่ฏดๆ˜Ž

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

ๅˆ›ๅปบๅ‰็ซฏๅŽ๏ผŒๆˆ‘ไปฌๅฐฑๅฏไปฅ็ปง็ปญๅˆ›ๅปบไธบ่ฏฅๅบ”็”จๆไพ›ๆ•ฐๆฎๅ’ŒไธšๅŠก่ง„ๅˆ™็š„ๆœๅŠกๅ’Œๆจกๅ—ไบ†ใ€‚

ๅˆ›ๅปบๆœๅŠกๅ’Œๆจกๅ—

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

ๆญฅ้ชค 1๏ผšๅฎšไน‰ๆœๅŠก

้ฆ–ๅ…ˆ๏ผŒๆˆ‘ไปฌๅฐ†ๅˆ›ๅปบไปฅไธ‹ๆœๅŠก๏ผŒๆฏไธชๆœๅŠก้ƒฝๆœ‰ๆ˜Ž็กฎ็š„่Œ่ดฃ๏ผš

  • Catalog๏ผˆๆจกๅ—ๅŒ–๏ผ‰โ€“ ่ดŸ่ดฃ็ฎก็†ไบงๅ“ใ€็ฑปๅˆซๅ’Œไปทๆ ผ๏ผ›
  • Sales โ€“ ่ดŸ่ดฃ้”€ๅ”ฎๅ’Œ่ฎขๅ•ๅค„็†๏ผ›
  • Stock โ€“ ่ดŸ่ดฃๅบ“ๅญ˜ๅ’Œๅบ“ๅญ˜ๅ˜ๅŠจ็ฎก็†๏ผ›
  • Security โ€“ ่ดŸ่ดฃ่บซไปฝ้ชŒ่ฏใ€ๆŽˆๆƒๅ’Œ็”จๆˆท็ฎก็†ใ€‚

่ฆๅˆ›ๅปบๆ–ฐๆœๅŠก๏ผŒ่ฏทๆ‰ง่กŒๅ‘ฝไปค๏ผš

lino service new

ๆ‰ง่กŒๅ‘ฝไปคๆœŸ้—ด๏ผŒCLI ไผš่ฆๆฑ‚่พ“ๅ…ฅ๏ผš

  • ๆœๅŠกๅ็งฐ๏ผšไพ‹ๅฆ‚๏ผŒCatalog๏ผ›
  • ๆ•ฐๆฎๅบ“๏ผš้€‰ๆ‹ฉๆœ€้€‚ๅˆๆ‚จ้กน็›ฎ็š„ๆŠ€ๆœฏ๏ผˆSQL Serverใ€PostgreSQL ็ญ‰๏ผ‰๏ผ›

ๆญฅ้ชค 2๏ผšๅœจๆœๅŠกไธญๅˆ›ๅปบๆจกๅ—

ๅนถ้žๆ‰€ๆœ‰ๆœๅŠก้ƒฝ้œ€่ฆๆจกๅ—ๅŒ–ใ€‚ๅœจๆˆ‘ไปฌ็š„้กน็›ฎไธญ๏ผŒๅชๆœ‰ Catalog ๆœๅŠกไผšๆœ‰ๆจกๅ—๏ผŒ็”จไบŽๅˆ†็ฆปๅฆ‚ๅ•†ๅ“็ฎก็†ๅ’Œๅฎšไปท็ญ‰่Œ่ดฃใ€‚

ๆˆ‘ไปฌไธบ Catalog ๆœๅŠกๅฎšไน‰ไบ†ไปฅไธ‹ๆจกๅ—๏ผš

  • Merchandising โ€“ ไบงๅ“ๅ’Œ็ฑปๅˆซ็ฎก็†๏ผ›
  • Pricing โ€“ ไปทๆ ผใ€ไฟƒ้”€ๅ’Œๅ˜ๆ›ดๅކๅฒ็ฎก็†ใ€‚

่ฆๅˆ›ๅปบๆจกๅ—๏ผŒ่ฏทๆ‰ง่กŒๅ‘ฝไปค๏ผš

lino module new

ๆ‚จๅฏไปฅๅœจๆจกๅ—ๅŒ–ๆœๅŠก Catalog ไธญๅˆ›ๅปบไปปๆ„ๆ•ฐ้‡็š„ๆจกๅ—ใ€‚ ๆญคๅค–๏ผŒๆ นๆฎๅคๆ‚ๆ€ง๏ผŒไธ€ไบ›ๆจกๅ—ๆœชๆฅๅฏ่ƒฝๆˆไธบ็‹ฌ็ซ‹ๆœๅŠกใ€‚ ๆญคๅค„ๅฑ•็คบ็š„ๅˆ’ๅˆ†ไป…ไธบๆ•™ๅญฆ็คบไพ‹๏ผŒ็”จไบŽ่ฏดๆ˜Žๆจกๅ—ๅŒ–็ป„็ป‡ใ€‚

้กน็›ฎๆœ€็ปˆ็ป“ๆž„

ๅˆ›ๅปบๆœๅŠกๅ’Œๆจกๅ—ๅŽ๏ผŒๆ‚จ็š„่งฃๅ†ณๆ–นๆกˆๅบ”ๅ…ทๆœ‰็ฑปไผผไปฅไธ‹็ป“ๆž„๏ผš

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/๏ผšๆŒ‰ๆœๅŠกๅ’Œๆจกๅ—็ป„็ป‡็š„ๅ•ๅ…ƒๆต‹่ฏ•ๅ’Œ้›†ๆˆๆต‹่ฏ•ใ€‚

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

ๆทปๅŠ ่บซไปฝ้ชŒ่ฏๅ’ŒๆŽˆๆƒ

่บซไปฝ้ชŒ่ฏๅ’ŒๆŽˆๆƒๆ˜ฏไปปไฝ•็Žฐไปฃ็ณป็ปŸ็š„ๆ ธๅฟƒ่ฆ็ด ใ€‚ ๅœจ Lino CLI ไธญ๏ผŒๅฐ†ๅฎƒไปฌๆทปๅŠ ๅˆฐ้กน็›ฎ้žๅธธ็ฎ€ๅ•ๅ’Œๅฟซ้€Ÿใ€‚

ๆญฅ้ชค 1๏ผšๆ‰ง่กŒ่บซไปฝ้ชŒ่ฏๅ‘ฝไปค

่ฆๆทปๅŠ ่บซไปฝ้ชŒ่ฏๅ’ŒๆŽˆๆƒๅŠŸ่ƒฝ๏ผŒ่ฏทไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค๏ผš

lino features auth add

CLI ๅฐ†ๅผ•ๅฏผๆ‚จๅฎŒๆˆไปฅไธ‹ๆญฅ้ชค๏ผš

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

ๆญฅ้ชค 2๏ผš็”Ÿๆˆ็š„็ป“ๆž„

ๆ‰ง่กŒๅ‘ฝไปคๅŽ๏ผŒSecurity ๆœๅŠกๅฐ†ๅŒ…ๅซๅฆ‚ไธ‹ๆ–‡ไปถๅ’Œๆ–‡ไปถๅคน๏ผš

  • Entities: ็”จๆˆทใ€่ง’่‰ฒๅ’Œๆƒ้™็ฑป๏ผ›
  • Infrastructure: ๆ•ฐๆฎๅบ“้…็ฝฎๅ’Œๅˆ›ๅปบ่กจ็š„่ฟ็งปๆ–‡ไปถ๏ผ›
  • Application: ่บซไปฝ้ชŒ่ฏๆœๅŠกใ€็”จๆˆท็ฎก็†ๅ’Œๅ‡ญ่ฏ้ชŒ่ฏ๏ผ›
  • API/Host: ็™ปๅฝ•ใ€็™ปๅ‡บใ€ๆณจๅ†Œๅ’Œ่ง’่‰ฒ็ฎก็†็š„็ซฏ็‚นใ€‚

้€š่ฟ‡่ฟ™ไบ›่ฎพ็ฝฎ๏ผŒๆ‚จ็š„ๅบ”็”จๅฐ†ๆ‹ฅๆœ‰ๅผบๅคง็š„่บซไปฝ้ชŒ่ฏๅ’Œ็ฒพ็ป†็š„่ฎฟ้—ฎๆŽงๅˆถ๏ผŒ่ƒฝๅคŸๆ”ฏๆŒๅคšไธช็”จๆˆทๅ’ŒไธๅŒๆƒ้™็ญ‰็บงใ€‚

ๆทปๅŠ ๅŽๅฐไปปๅŠก

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

Lino ไฝฟ็”จ Outbox ๆจกๅผ ๆฅ็กฎไฟๆœๅŠก็”Ÿๆˆ็š„ๆ‰€ๆœ‰ๆถˆๆฏๅœจๅ‘้€ไน‹ๅ‰้ƒฝ่ขซๅฏ้ ๅœฐ่ฎฐๅฝ•ใ€‚ ่ฟ™ๆ ทๆˆ‘ไปฌๅฏไปฅ๏ผš

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

ๆญฅ้ชค 1๏ผšๆ‰ง่กŒๅ‘ฝไปค

่ฆๅœจ้กน็›ฎไธญๆทปๅŠ ๅŽๅฐไปปๅŠกๆ”ฏๆŒ๏ผŒ่ฏทๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš

lino features background-job add

CLI ๅฐ†่ฆๆฑ‚ๆ‚จ้€‰ๆ‹ฉๅŽๅฐไปปๅŠกๅฐ†่ฆๅฎ‰่ฃ…็š„ๆœๅŠกใ€‚้€šๅธธ๏ผŒๆ‚จไผš้€‰ๆ‹ฉ้›†ไธญ็”Ÿไบงไบ‹ไปถ็š„ๆœๅŠก๏ผŒไพ‹ๅฆ‚ Catalog ๆˆ– Salesใ€‚

ๆญฅ้ชค 2๏ผš้…็ฝฎๆ‰ง่กŒ

ๅœจ้…็ฝฎ่ฟ‡็จ‹ไธญ๏ผŒๆ‚จๅฏไปฅๅฎšไน‰๏ผš

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

่ฟ™ไบ›ๅ‚ๆ•ฐๅ–ๅ†ณไบŽ็ณป็ปŸ่ง„ๆจกใ€ๆœบๅ™จๆ€ง่ƒฝไปฅๅŠ้ข„่ฎก็š„ไบ‹ไปถๆ•ฐ้‡ใ€‚

ๆญฅ้ชค 3๏ผš็”Ÿๆˆ็š„็ป“ๆž„

้…็ฝฎๅฎŒๆˆๅŽ๏ผŒ้กน็›ฎๅฐ†ๆ‹ฅๆœ‰ไธ€ไธชๅŽๅฐไปปๅŠก๏ผŒๅ‡†ๅค‡ๅค„็†ๆฏไธชๆœๅŠกไธญ Outbox ่กจ็š„ๆถˆๆฏใ€‚

่ฟ™ๆ ทๅฏไปฅ็กฎไฟๆ‰€ๆœ‰้›†ๆˆไบ‹ไปถ้ƒฝ่ขซๅฏ้ ไธ”้ซ˜ๆ•ˆๅœฐๅค„็†๏ผŒไฝฟๅคšไธชๆœๅŠกๅ’Œๆจกๅ—่ƒฝๅคŸๅผ‚ๆญฅ้€šไฟก๏ผŒ่€Œไธไผšๅฝฑๅ“ไธป็ณป็ปŸ็š„ๆ€ง่ƒฝใ€‚

ๅˆ›ๅปบๅฎžไฝ“ๅ’Œๆžšไธพ

ๆœฌ่Š‚ๅฐ†่ฏฆ็ป†ไป‹็ปๅบ”็”จ็จ‹ๅบไธญๅฎžไฝ“ใ€ๆžšไธพๅ’Œๅ€ผๅฏน่ฑก็š„่ฎพ่ฎก๏ผŒๅนถ่ฏดๆ˜Žๆฏไธช้กน็›ฎๅฐ†ๅœจๅ“ชไบ›ๆœๅŠกๅ’Œๆจกๅ—ไธญๅˆ›ๅปบใ€‚

1. ๅˆ›ๅปบ Category ๅฎžไฝ“

่ฆๅˆ›ๅปบ่ฏฅๅฎžไฝ“๏ผŒ่ฏทไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค๏ผš

lino entity new

่ฏฅๅฎžไฝ“ๅฐ†ๅœจ Catalog ๆœๅŠกๅ’Œ Merchandising ๆจกๅ—ไธญๅˆ›ๅปบ๏ผŒ็ป“ๆž„ๅฆ‚ไธ‹๏ผš

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

2. ๅˆ›ๅปบ Product ๅฎžไฝ“

ๆŽฅไธ‹ๆฅ๏ผŒๅœจ็›ธๅŒ็š„ๆœๅŠกๅ’Œๆจกๅ—ไธญๅˆ›ๅปบ Product ๅฎžไฝ“๏ผŒๅŒ…ๆ‹ฌๅ€ผๅฏน่ฑกๅ’Œๅ€ผๆžšไธพ๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 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 ๅˆ›ๅปบๅ€ผๅฏน่ฑก ProductDimension

่ฏฅๅ€ผๅฏน่ฑก่กจ็คบไบงๅ“็š„ๅฐบๅฏธ๏ผš

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

2.2 ๅˆ›ๅปบๆžšไธพ ProductStatus

่ฏฅๆžšไธพๅฎšไน‰ไบ†ไบงๅ“็š„็Šถๆ€๏ผš

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

3. ๆทปๅŠ ๆ–ฐๅฑžๆ€ง

้š็€้กน็›ฎ็š„ๅ‘ๅฑ•๏ผŒๆˆ‘ไปฌๅฏไปฅ็ผ–่พ‘็Žฐๆœ‰ๅฎžไฝ“ไปฅๆทปๅŠ ๆ–ฐๅฑžๆ€งใ€‚ ไพ‹ๅฆ‚๏ผŒๆˆ‘ไปฌๅฐ†ๅ‘ Product ๅฎžไฝ“ๆทปๅŠ ไธ€ไธชๅ›พ็‰‡ๅˆ—่กจ๏ผš

lino entity edit

ๅˆ›ๅปบ็ฑปๅž‹ไธบ List<ProductImage> ็š„ Images ๅฑžๆ€ง๏ผŒๅฐ†็”Ÿๆˆไปฅไธ‹็ป“ๆž„๏ผš

โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 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<ProductImage> โ”‚        โ”‚          โ”‚                โ”‚
โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3.1 ๅˆ›ๅปบ ProductImage ๅฎžไฝ“

่ฏฅๅฎžไฝ“ๅฑžไบŽ Product ่šๅˆ๏ผŒๅนถๅ…ทๆœ‰ไปฅไธ‹็ป“ๆž„๏ผš

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

4. ไธบๅ…ถไป–ๆœๅŠกๅˆ›ๅปบๅฎžไฝ“

ๅœจ Sales ๆœๅŠกไธญ๏ผŒๆˆ‘ไปฌๅˆ›ๅปบไบ† ProductSnapshot ๅฎžไฝ“๏ผŒ่ฏฅๅฎžไฝ“ๅฐ†็”ฑ้›†ๆˆไบ‹ไปถๅกซๅ……ใ€‚ ็”ฑไบŽ Product ๅฎžไฝ“็š„ๅŽŸๅง‹ Id ๆฅ่‡ช Catalog ๆœๅŠก๏ผŒๅ› ๆญคๅœจๆญคๅค„ไธ่ƒฝ่‡ชๅขžใ€‚

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

ๆณจๆ„๏ผšไธบไบ†็ฎ€ๅŒ–ๆ–‡ๆกฃ๏ผŒSales ๆœๅŠกไธญ็š„ ProductSnapshot ไป…ๅคๅˆถไบ†ๅฟ…่ฆๅญ—ๆฎตใ€‚่ฏธๅฆ‚ Customerใ€Order ๅ’Œ StockItem ็ญ‰่กฅๅ……ๅฎžไฝ“ๅฐ†ๅœจๆญคไธไฝœ่ฏฆ็ป†่ฏดๆ˜Žใ€‚

ๅˆ›ๅปบไบ‹ไปถๅŠๅ…ถๅค„็†็จ‹ๅบ

ๅ›ž้กพไธ€ไธ‹๏ผŒๅœจไธŠไธ€่Š‚ไธญ๏ผŒๆˆ‘ไปฌๅœจๆจกๅ—ๅŒ–ๆœๅŠก 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                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ฟ™ๆ ท๏ผŒๆˆ‘ไปฌๅฐฑๆœ‰ไบ†๏ผš

  • ๅˆ›ๅปบไบ†้ข†ๅŸŸไบ‹ไปถ (ProductCreated ๅ’Œ ProductUpdated)๏ผ›
  • ๅฏนๅบ”็š„้ข†ๅŸŸไบ‹ไปถๅค„็†็จ‹ๅบ๏ผ›
  • ้›†ๆˆไบ‹ไปถ็”ฑ้ข†ๅŸŸไบ‹ไปถๅค„็†็จ‹ๅบ่‡ชๅŠจ่ฎฐๅฝ•ๅœจ Outbox ไธญใ€‚

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    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ฟ™ๆ ท๏ผŒๅœจ Sales ๆœๅŠกไธญ๏ผŒๆˆ‘ไปฌๆœ‰ไธคไธช้›†ๆˆไบ‹ไปถๅค„็†็จ‹ๅบ๏ผŒไป…ๆถˆ่ดน Catalog.Merchandising ็š„้›†ๆˆไบ‹ไปถๆ‰€้œ€ๅญ—ๆฎตใ€‚ ่ฟ™็กฎไฟไบ†ๅคๅˆถ่กจไป…ไฟ็•™ๅฟ…่ฆ็š„ๆ•ฐๆฎ๏ผŒไปŽ่€Œไผ˜ๅŒ–ๅญ˜ๅ‚จๅ’Œๆ€ง่ƒฝใ€‚

็”Ÿๆˆ็ฝ‘้กตใ€APIใ€Commands ๅ’Œ Queries

Lino CLI ็š„ไธ€ไธช้‡่ฆไผ˜ๅŠฟๆ˜ฏ่ƒฝๅคŸ่‡ชๅŠจๅŒ–ๅˆ›ๅปบ็ฝ‘้กตใ€APIใ€Commands ๅ’Œ Queries๏ผŒไปŽ่€Œ็ฎ€ๅŒ–ๆ•ดไธชๅผ€ๅ‘ๆต็จ‹ใ€‚ ่ฆๅผ€ๅง‹๏ผŒๅช้œ€ๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš

lino page new

ๅœจๆญค่ฟ‡็จ‹ไธญ๏ผŒๆ‚จๅฐ†๏ผš

  • ้€‰ๆ‹ฉ่ฆๅ…ฌๅผ€็š„ๆœๅŠกใ€ๆจกๅ—ๅ’Œๅฎžไฝ“๏ผ›
  • ้€‰ๆ‹ฉๅฐ†ๅŒ…ๅซๅœจๅˆ—่กจไธญ็š„ๅญ—ๆฎต๏ผ›
  • ่‡ชๅŠจ็”Ÿๆˆๅˆ—่กจ้กต้ข๏ผˆๅˆ†้กต็ฝ‘ๆ ผ๏ผ‰ๅ’Œๅˆ›ๅปบ/็ผ–่พ‘่กจๅ•๏ผ›
  • ็”Ÿๆˆไพ›ๅ‰็ซฏไฝฟ็”จ็š„ HttpClient ็ฑป๏ผ›
  • ๅˆ›ๅปบๆ‰€ๆœ‰ๅฟ…่ฆ็š„ REST API๏ผˆPOSTใ€PUTใ€PATCHใ€DELETE ๅ’Œ GET๏ผ‰๏ผ›
  • ๅˆ›ๅปบ Commands ๅ’Œ Queries ๅŠๅ…ถๅฏนๅบ”็š„ Handlers๏ผŒ็›ดๆŽฅไธŽๆ•ฐๆฎๅบ“ไบคไบ’๏ผŒ็กฎไฟๅฎŒๆ•ด็š„ CRUD ๆต็จ‹ใ€‚

ไฝฟ็”จๆญคๅ‘ฝไปค๏ผŒๆ‚จๅฏไปฅ่Žทๅพ—ไธ€ไธชๅŠŸ่ƒฝๅฎŒๆ•ด็š„ๅบ”็”จ็จ‹ๅบ๏ผŒ่€Œๆ— ้œ€ๆ‰‹ๅŠจ็ผ–ๅ†™็•Œ้ขๅฑ‚ใ€API ๅ’ŒไธšๅŠก้€ป่พ‘๏ผŒๅŒๆ—ถไฟๆŒๆœๅŠกไน‹้—ด็š„ๆ ‡ๅ‡†ๅ’Œไธ€่‡ดๆ€งใ€‚

ๅฏนไบŽๆญค้กน็›ฎ๏ผŒๆˆ‘ไปฌๅฏไปฅไธบไปฅไธ‹ๅฎžไฝ“็”Ÿๆˆ้›†ๆˆ้กต้ข๏ผš

  • Catalog.Merchandising.Category
  • Catalog.Merchandising.Product
  • Sales.ProductSnapshot

ๅœจ็”Ÿๆˆ้กต้ขใ€API ๅ’Œ Commands/Queries ๅŽ๏ผŒๅบ”็”จ็จ‹ๅบๅฐ†ๅ‡†ๅค‡ๅฅฝๅœจๅ‰็ซฏๅ’ŒๅŽ็ซฏไน‹้—ด่ฟ›่กŒๅฎŒๆ•ดไบคไบ’๏ผŒๆ‰€ๆœ‰้ชŒ่ฏใ€่ทฏ็”ฑๅ’ŒๆŒไน…ๅŒ–้ƒฝๅทฒ็”ฑ Lino CLI ่‡ชๅŠจ้…็ฝฎใ€‚

ๅˆ›ๅปบๆ•ฐๆฎๅบ“่ฟ็งป

็Žฐๅœจๆ‰€ๆœ‰ๅฎžไฝ“้ƒฝๅทฒๅˆ›ๅปบ๏ผŒๆ˜ฏๆ—ถๅ€™็”Ÿๆˆ่ฟ็งป๏ผŒไปฅไพฟๆ•ฐๆฎๅบ“ๆ นๆฎๅฎšไน‰็š„ๆจกๅž‹ๅˆ›ๅปบๆˆ–ๆ›ดๆ–ฐใ€‚ Lino CLI ไผš่‡ชๅŠจๅŒ–ๆญค่ฟ‡็จ‹๏ผŒ้›†ๆˆ Entity Framework ๅนถ็”Ÿๆˆๅฏๆ‰ง่กŒ็š„่„šๆœฌใ€‚

่ฆๅˆ›ๅปบๆ–ฐ็š„่ฟ็งป๏ผŒ่ฏทๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš

lino database migrations new

ๅœจๆ‰ง่กŒ่ฟ‡็จ‹ไธญ๏ผŒๆ‚จ้œ€่ฆ๏ผš

  • ้€‰ๆ‹ฉๅฐ†ๆŽฅๆ”ถ่ฟ็งป็š„ๆœๅŠกๅ’Œๆจกๅ—๏ผ›
  • ไธบ่ฟ็งปๆไพ›ๆ่ฟฐ๏ผŒไพ‹ๅฆ‚ "Initial migration"ใ€‚

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 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 CLI ๅฐ†็”Ÿๆˆ๏ผš

  • ๆœๅŠกๅฝ“ๅ‰็‰ˆๆœฌ็š„ๆ–ฐๆ•ฐๆฎๅบ“่ฟ็งป๏ผ›
  • ็›ธๅบ”็š„ SQL ่„šๆœฌ๏ผŒไฝไบŽ Infrastructure.Persistence ๅฑ‚๏ผŒ่ทฏๅพ„ไธบ /scripts/<version>/<ๆ–‡ไปถๅ>๏ผ›
  • ๅœจๆœๅŠกๅކๅฒ่ฎฐๅฝ•ไธญๆณจๅ†Œ่ฟ็งป็‰ˆๆœฌ๏ผŒ็กฎไฟๅฏ่ฟฝ่ธชๆ€งๅ’Œไธ€่‡ดๆ€งใ€‚

ๆœ€ไฝณๅฎž่ทต๏ผš

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

้ตๅพชๆญคๆต็จ‹๏ผŒๅฏ็กฎไฟๆ•ฐๆฎๅบ“ๅง‹็ปˆไธŽ Lino CLI ไธญๅฎšไน‰็š„้ข†ๅŸŸๆจกๅž‹ไฟๆŒไธ€่‡ด๏ผŒๅ‡ๅฐ‘้”™่ฏฏๅนถ็ฎ€ๅŒ–็ปดๆŠคใ€‚

็”Ÿๆˆ Docker ้•œๅƒ

ๅœจๅฎŒๆˆไธบ็‰นๅฎš็‰ˆๆœฌ็”Ÿๆˆไปฃ็ ใ€่ฟ›่กŒๆต‹่ฏ•ๅนถๅฎž็Žฐๆ‰€ๆœ‰ๅฟ…่ฆ็š„ไธšๅŠก่ง„ๅˆ™ๅŽ๏ผŒๆ‚จๅฏไปฅไธบ้กน็›ฎ็š„ๆœๅŠกๅ’Œ็ฝ‘้กตๅบ”็”จ็”Ÿๆˆ Docker ้•œๅƒ๏ผŒไปฅไพฟๅŽ็ปญๅ‘ๅธƒๅˆฐๅฎนๅ™จๆณจๅ†Œ่กจใ€‚

Lino CLI ไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค็ฎ€ๅŒ–ไบ†่ฏฅ่ฟ‡็จ‹๏ผš

lino build

ๆ‰ง่กŒๆ—ถ๏ผŒๆ‚จๅฐ†็œ‹ๅˆฐ้กน็›ฎไธญๆ‰€ๆœ‰ๅฏ็”จๆœๅŠกๅ’Œ็ฝ‘้กตๅบ”็”จ็š„ๅˆ—่กจ๏ผŒไปฅๅŠๅฎƒไปฌ็š„ๅฝ“ๅ‰็‰ˆๆœฌ๏ผš

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|

ๆ‚จๅฏไปฅ้€‰ๆ‹ฉไธ€ไธชๆˆ–ๅคšไธชๆœๅŠกๅ’Œ็ฝ‘้กตๅบ”็”จๆฅๅŒๆ—ถ็”Ÿๆˆ้•œๅƒ๏ผŒๅช้œ€ๅ‹พ้€‰ๆ‰€้œ€้กน็›ฎใ€‚

ๆŽฅไธ‹ๆฅ๏ผŒ็ณป็ปŸไผš่ฆๆฑ‚ๆ‚จ้€‰ๆ‹ฉๅฆ‚ไฝ•ๆ›ดๆ–ฐ็”Ÿๆˆ้•œๅƒ็š„็‰ˆๆœฌใ€‚ๅฏ็”จ้€‰้กนๅฆ‚ไธ‹๏ผš

  • ไฟๆŒๅฝ“ๅ‰็‰ˆๆœฌ โ€“ ไธไฟฎๆ”น็Žฐๆœ‰็‰ˆๆœฌ๏ผ›
  • Patch โ€“ ๅขžๅŠ ่กฅไธ็‰ˆๆœฌ๏ผˆไพ‹ๅฆ‚๏ผš0.1.0 โ†’ 0.1.1๏ผ‰๏ผ›
  • Minor โ€“ ๅขžๅŠ ๆฌก็‰ˆๆœฌๅท๏ผˆไพ‹ๅฆ‚๏ผš0.1.0 โ†’ 0.2.0๏ผ‰๏ผ›
  • Major โ€“ ๅขžๅŠ ไธป็‰ˆๆœฌๅท๏ผˆไพ‹ๅฆ‚๏ผš0.1.0 โ†’ 1.0.0๏ผ‰ใ€‚

้€‰ๆ‹ฉๆœๅŠกๅนถ็กฎๅฎš็‰ˆๆœฌ้€’ๅขžๆ–นๅผๅŽ๏ผŒLino CLI ไผšๆ‰ง่กŒไปฅไธ‹ๆ“ไฝœ๏ผš

  • ๆž„ๅปบๆฏไธชๆœๅŠกๅ’Œ็ฝ‘้กตๅบ”็”จ็š„ไปฃ็ ๏ผ›
  • ็”Ÿๆˆ็›ธๅบ”็š„ Docker ้•œๅƒ๏ผ›
  • ๅบ”็”จๆŒ‡ๅฎš็‰ˆๆœฌ็š„ๆ ‡็ญพ๏ผ›
  • ๅฐ†้•œๅƒๆไพ›็”จไบŽๅ‘ๅธƒๅˆฐๆ‚จ็š„ๅฎนๅ™จๆณจๅ†Œ่กจใ€‚

ๅฎŒๆˆ่ฏฅ่ฟ‡็จ‹ๅŽ๏ผŒๅ‡่ฎพๆ‰€ๆœ‰ๆœๅŠกๅ’Œ็ฝ‘้กตๅบ”็”จ้ƒฝๅทฒ่ขซ้€‰ๆ‹ฉ๏ผŒ็”Ÿๆˆ็š„้•œๅƒๅฐ†ๅ…ทๆœ‰ไปฅไธ‹็ป“ๆž„๏ผš

  • my-app/services/catalog-host - tag: 0.1.0
  • my-app/services/sales-api - tag: 0.1.0
  • my-app/services/security-api - tag: 0.1.0
  • my-app/services/stock-api - tag: 0.1.0
  • my-app/webapps/backoffice - tag: 0.1.0

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

ๅœจๅบ”็”จไธญๅˆ›ๅปบ็‰ˆๆœฌ

ไธบๆœๅŠกๆˆ–็ฝ‘้กตๅบ”็”จๅขžๅŠ ๆ–ฐ็‰ˆๆœฌๆ˜ฏไธ€ไธช็ฎ€ๅ•็š„่ฟ‡็จ‹๏ผŒๅนถไธ”ๅœจ Lino CLI ไธญ้›†ไธญ็ฎก็†ใ€‚ๅช้œ€ๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผš

lino version bump

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

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|

้€‰ๆ‹ฉๆ‰€้œ€้กน็›ฎๅŽ๏ผŒ็ณป็ปŸไผš่ฆๆฑ‚ๆ‚จ้€‰ๆ‹ฉ็‰ˆๆœฌ้€’ๅขž็ฑปๅž‹ใ€‚ๅฏ็”จ้€‰้กนๅฆ‚ไธ‹๏ผš

  • Patch โ€“ ๅฐไฟฎๅค๏ผŒไธๅฝฑๅ“ๅŠŸ่ƒฝ๏ผ›
  • Minor โ€“ ๆทปๅŠ ๅ‘ๅŽๅ…ผๅฎน็š„ๆ–ฐๅŠŸ่ƒฝ๏ผ›
  • Major โ€“ ๅฏ่ƒฝ็ ดๅๅ‘ๅŽๅ…ผๅฎนๆ€ง็š„ๆ›ดๆ”นใ€‚

้œ€่ฆๆณจๆ„็š„ๆ˜ฏ๏ผŒๆœๅŠกๅ’Œ็ฝ‘้กตๅบ”็”จ็š„็‰ˆๆœฌไผš็›ดๆŽฅๅฝฑๅ“๏ผš

  • Docker ้•œๅƒ็š„ๆ ‡็ญพ๏ผ›
  • ็”จไบŽๅญ˜ๅ‚จๆ•ฐๆฎๅบ“่ฟ็งป็”Ÿๆˆ่„šๆœฌ็š„ๆ–‡ไปถๅคน๏ผ›
  • ้กน็›ฎ็š„ๅ‘ๅธƒๅ’Œๅކๅฒ่ฎฐๅฝ•ๆŽงๅˆถใ€‚

่‡ณๆญค๏ผŒๆˆ‘ไปฌๅฎŒๆˆไบ†ไฝฟ็”จ Lino CLI ๆž„ๅปบ Web ้กน็›ฎ็š„ๆ‰€ๆœ‰ๆ ธๅฟƒๅ‘ฝไปค็š„้€ๆญฅๆŒ‡ๅ—๏ผŒๅŒ…ๆ‹ฌๅฎ‰่ฃ…ใ€ๅˆ›ๅปบๆœๅŠกใ€ๅฎžไฝ“ใ€ไบ‹ไปถๅ’Œ้กต้ข๏ผŒไปฅๅŠ็”Ÿๆˆ Docker ้•œๅƒๅ’Œ็‰ˆๆœฌ็ฎก็†ใ€‚

ๅˆซๅฟ˜ไบ†ๅ…ณๆณจๆˆ‘ไปฌ็š„ YouTube ้ข‘้“๏ผŒ่Žทๅ–่ฏฆ็ป†ๆ•™็จ‹ใ€ๅฎžๆ“ๆผ”็คบๅ’Œๅทฅๅ…ทไฝฟ็”จๆŠ€ๅทง๏ผŒไปŽๅŸบ็ก€ๆ“ไฝœๅˆฐ้ซ˜็บงๅŠŸ่ƒฝใ€‚

发生了未处理的错误。 重新加载 ๐Ÿ—™