ドメインモデリング

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

ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ

ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใจใฏใ€ไธปใซใใฎ่ญ˜ๅˆฅๆ€งใซใ‚ˆใฃใฆๅฎš็พฉใ•ใ‚Œใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใ‚ใ‚Šใ€ๅ˜ใซๅฑžๆ€งใ ใ‘ใงๅฎš็พฉใ•ใ‚Œใ‚‹ใ‚‚ใฎใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ ๅฑžๆ€งใŒๆ™‚้–“ใฎ็ตŒ้Žใจใจใ‚‚ใซๅค‰ใ‚ใฃใฆใ‚‚ใ€ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎ่ญ˜ๅˆฅๆ€งใฏๅค‰ใ‚ใ‚Šใพใ›ใ‚“ใ€‚

ไธปใช็‰นๅพด๏ผš

  • ไธ€ๆ„ใฎ่ญ˜ๅˆฅๅญใ‚’ๆŒใค๏ผˆ้€šๅธธใฏId๏ผ‰ใ€‚
  • ้‡่ฆใชใฎใฏใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใŒไฝ•ใ‚’ๅซใ‚“ใงใ„ใ‚‹ใ‹ใงใฏใชใใ€่ชฐใงใ‚ใ‚‹ใ‹ใงใ™ใ€‚
  • ๅฑžๆ€งใฏๆ™‚้–“ใจใจใ‚‚ใซๅค‰ๅŒ–ใ™ใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚

Linoใงใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ™ใ‚‹

Linoใ‚’ไฝฟใฃใฆๆ–ฐใ—ใ„ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ™ใ‚‹ใซใฏใ€ไปฅไธ‹ใ‚’ๅฎŸ่กŒใ—ใพใ™๏ผš

lino entity new

CLIใ‚ฆใ‚ฃใ‚ถใƒผใƒ‰ใŒไปฅไธ‹ใ‚’ๅฐ‹ใญใพใ™๏ผš

  • ใ‚ตใƒผใƒ“ใ‚น โ€“ ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ™ใ‚‹ใ‚ตใƒผใƒ“ใ‚นใ€‚
  • ใƒขใ‚ธใƒฅใƒผใƒซ โ€“ ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ™ใ‚‹ใƒขใ‚ธใƒฅใƒผใƒซ๏ผˆใƒขใ‚ธใƒฅใƒฉใƒผใ‚ตใƒผใƒ“ใ‚นใฎๅ ดๅˆ๏ผ‰ใ€‚
  • ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃๅ โ€“ ใƒ‰ใƒกใ‚คใƒณใŠใ‚ˆใณใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒ†ใƒผใƒ–ใƒซใงไฝฟ็”จใ•ใ‚Œใ‚‹ๅๅ‰ใ€‚

ใใฎๅพŒใ€ๅ„ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใ‚’่จญๅฎšใ—ใฆใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ๆง‹ๆˆใ—ใพใ™ใ€‚

ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใ‚ฃใƒผใƒซใƒ‰ใ‚ฟใ‚คใƒ—

ใ‚ฟใ‚คใƒ— ่ชฌๆ˜Ž ็ฏ„ๅ›ฒ๏ผๅ‚™่€ƒ
short16ใƒ“ใƒƒใƒˆๆ•ดๆ•ฐ-32,768 ๏ฝž 32,767
int32ใƒ“ใƒƒใƒˆๆ•ดๆ•ฐ-2,147,483,648 ๏ฝž 2,147,483,647
long64ใƒ“ใƒƒใƒˆๆ•ดๆ•ฐ-9,223,372,036,854,775,808 ๏ฝž 9,223,372,036,854,775,807
stringใƒ†ใ‚ญใ‚นใƒˆ็ด„20ๅ„„ๆ–‡ๅญ—ใพใง
bool็œŸๅฝๅ€คtrue ใพใŸใฏ false
Guidใ‚ฐใƒญใƒผใƒใƒซไธ€ๆ„่ญ˜ๅˆฅๅญๅˆ†ๆ•ฃไธ€ๆ„ๆ€ง
decimal้ซ˜็ฒพๅบฆๅฐๆ•ฐ้‡‘่žๅ€คใซๆœ€้ฉ
floatๆตฎๅ‹•ๅฐๆ•ฐ็‚นๆ•ฐ๏ผˆ32ใƒ“ใƒƒใƒˆ๏ผ‰็ด„6๏ฝž9ๆกใฎ็ฒพๅบฆ
doubleๆตฎๅ‹•ๅฐๆ•ฐ็‚นๆ•ฐ๏ผˆ64ใƒ“ใƒƒใƒˆ๏ผ‰็ด„15๏ฝž17ๆกใฎ็ฒพๅบฆ
DateTimeๆ—ฅๆ™‚ใ‚ฟใ‚คใƒ ใ‚พใƒผใƒณๅซใ‚€
DateOnlyๆ—ฅไป˜ใฎใฟ (C# 10+)โ€“
TimeOnlyๆ™‚้–“ใฎใฟ (C# 10+)โ€“
Entityๅˆฅใฎใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใธใฎๅ‚็…ง1๏ผš1 ใพใŸใฏ 1๏ผšN
Value Objectไธๅค‰ใฎๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆไพ‹๏ผšไฝๆ‰€ใ€CPF
Enumๅˆ—ๆŒ™ๅž‹ๅ›บๅฎšใ•ใ‚ŒใŸๅ€คใฎ้›†ๅˆ
List<Entity>ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใฎใƒชใ‚นใƒˆ1๏ผšN
ManyToManyๅคšๅฏพๅคš็ตๅˆใƒ†ใƒผใƒ–ใƒซใŒๅฟ…่ฆ

ไพ‹

Person ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ไฝœๆˆใ™ใ‚‹ไพ‹๏ผš

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

Linoใซใ‚ˆใฃใฆ็”Ÿๆˆใ•ใ‚ŒใŸๆง‹้€ :

MyApp/
โ””โ”€โ”€ src/
    โ””โ”€โ”€ Services/
        โ””โ”€โ”€ MyService/
            โ””โ”€โ”€ Domain/
                โ”œโ”€โ”€ MyApp.MyService.Domain.csproj
                โ””โ”€โ”€ Aggregates/
                    โ””โ”€โ”€ People/
                        โ”œโ”€โ”€ Person.cs
                        โ”œโ”€โ”€ Errors/
                        โ”‚   โ””โ”€โ”€ PersonErrors.cs
                        โ”œโ”€โ”€ Repositories/
                        โ”‚   โ””โ”€โ”€ IPersonRepository.cs
                        โ””โ”€โ”€ Resources/
                            โ””โ”€โ”€ Person/
                                โ”œโ”€โ”€ PersonResources.resx
                                โ”œโ”€โ”€ PersonResources.en.resx
                                โ””โ”€โ”€ PersonResources.pt-BR.resx

ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใ‚’ๅฎš็พฉใ—ใŸๅพŒใ€Linoใ‚’ไฝฟใฃใฆMigrationsใ‚’็ฎก็†ใ—ใ€ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚’ๅŒๆœŸใ•ใ›ใพใ™ใ€‚ ใ“ใฎใƒ—ใƒญใ‚ปใ‚นใฏใ€Œๆฐธ็ถšๅŒ–ใƒฌใ‚คใƒคใƒผใ€ใ‚ปใ‚ฏใ‚ทใƒงใƒณใง่ฉณใ—ใ่ชฌๆ˜Žใ—ใพใ™ใ€‚

ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ

ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ใใฎๅฑžๆ€งใฎใฟใงๅฎš็พฉใ•ใ‚Œใ‚‹ใƒ‰ใƒกใ‚คใƒณใฎๆฆ‚ๅฟตใ‚’่กจใ—ใ€ๅ›บๆœ‰ใฎ่ญ˜ๅˆฅๅญใ‚’ๆŒใกใพใ›ใ‚“ใ€‚ใ™ในใฆใฎๅ€คใŒๅŒใ˜ๅ ดๅˆใ€ไบŒใคใฎๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏ็ญ‰ใ—ใ„ใจ่ฆ‹ใชใ•ใ‚Œใพใ™ใ€‚

ไธปใช็‰นๅพด๏ผš

  • ไฝœๆˆๅพŒใฏไธๅค‰ใงใ™ใ€‚
  • Idใ‚’ๆŒใกใพใ›ใ‚“ใ€‚

Linoใงๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹

ๆฌกใ‚’ๅฎŸ่กŒใ—ใฆใใ ใ•ใ„๏ผš

lino value-object new

CLIใฏไปฅไธ‹ใ‚’ๅฐ‹ใญใพใ™๏ผš

  • ใ‚ตใƒผใƒ“ใ‚น โ€“ ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใ‚ตใƒผใƒ“ใ‚นใ€‚
  • ใƒขใ‚ธใƒฅใƒผใƒซ โ€“ ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใƒขใ‚ธใƒฅใƒผใƒซ๏ผˆใƒขใ‚ธใƒฅใƒผใƒซใ‚ตใƒผใƒ“ใ‚นใฎใฟ๏ผ‰ใ€‚
  • ๅ ดๆ‰€ โ€“ ใƒ‰ใƒกใ‚คใƒณใƒซใƒผใƒˆใพใŸใฏ็‰นๅฎšใฎใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใ€‚
  • ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆๅใ€‚

ๆฌกใซใ€ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆง‹ๆˆใ™ใ‚‹ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใ‚’ๅฎš็พฉใ—ใพใ™ใ€‚

ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใ‚ฃใƒผใƒซใƒ‰ใ‚ฟใ‚คใƒ—

ใ‚ฟใ‚คใƒ—่ชฌๆ˜Žๅ‚™่€ƒ
short16ใƒ“ใƒƒใƒˆๆ•ดๆ•ฐ-32,768 โ†’ 32,767
int32ใƒ“ใƒƒใƒˆๆ•ดๆ•ฐ-2,147,483,648 โ†’ 2,147,483,647
long64ใƒ“ใƒƒใƒˆๆ•ดๆ•ฐ-9,223,372,036,854,775,808 โ†’ 9,223,372,036,854,775,807
stringใƒ†ใ‚ญใ‚นใƒˆ็ด„20ๅ„„ๆ–‡ๅญ—ใพใง
boolใƒ–ใƒผใƒซๅ€คtrue/false
decimalๆญฃ็ขบใชๅฐๆ•ฐ้‡‘้Šญ็š„ใชๅ€ค
floatๆตฎๅ‹•ๅฐๆ•ฐ็‚นๆ•ฐ (32ใƒ“ใƒƒใƒˆ)็ด„6๏ฝž9ๆก
doubleๆตฎๅ‹•ๅฐๆ•ฐ็‚นๆ•ฐ (64ใƒ“ใƒƒใƒˆ)็ด„15๏ฝž17ๆก
DateTimeๆ—ฅไป˜/ๆ™‚ๅˆปใ‚ฟใ‚คใƒ ใ‚พใƒผใƒณๅซใ‚€
DateOnlyๆ—ฅไป˜ใฎใฟC# 10ไปฅไธŠ
TimeOnlyๆ™‚ๅˆปใฎใฟC# 10ไปฅไธŠ

ไพ‹

ๅ€คใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ Address:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Property name โ”‚ Type   โ”‚ Length โ”‚ Required  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Street        โ”‚ string โ”‚  100   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Number        โ”‚ string โ”‚   10   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Neighborhood  โ”‚ string โ”‚   50   โ”‚           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ City          โ”‚ string โ”‚  100   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ State         โ”‚ string โ”‚   2    โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ PostalCode    โ”‚ string โ”‚   20   โ”‚     x     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Country       โ”‚ string โ”‚  100   โ”‚     x     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็”Ÿๆˆใ•ใ‚ŒใŸใƒ•ใ‚กใ‚คใƒซๆง‹้€ ๏ผˆใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆ Person๏ผ‰๏ผš

MyApp/
โ””โ”€โ”€ src/
    โ””โ”€โ”€ Services/
        โ””โ”€โ”€ MyService/
            โ””โ”€โ”€ Domain/
                โ”œโ”€โ”€ MyApp.MyService.Domain.csproj
                โ””โ”€โ”€ Aggregates/
                    โ””โ”€โ”€ People/
                        โ”œโ”€โ”€ Person.cs
                        โ”œโ”€โ”€ ValueObjects/
                        โ”‚   โ””โ”€โ”€ Address.cs
                        โ”œโ”€โ”€ Errors/
                        โ”‚   โ”œโ”€โ”€ AddressErrors.cs
                        โ”‚   โ””โ”€โ”€ PersonErrors.cs
                        โ”œโ”€โ”€ Repositories/
                        โ”‚   โ””โ”€โ”€ IPersonRepository.cs
                        โ””โ”€โ”€ Resources/
                            โ”œโ”€โ”€ Address/
                            โ”‚   โ”œโ”€โ”€ AddressResources.resx
                            โ”‚   โ”œโ”€โ”€ AddressResources.en.resx
                            โ”‚   โ””โ”€โ”€ AddressResources.pt-BR.resx
                            โ””โ”€โ”€ Person/
                                โ”œโ”€โ”€ PersonResources.resx
                                โ”œโ”€โ”€ PersonResources.en.resx
                                โ””โ”€โ”€ PersonResources.pt-BR.resx

ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃใจๅŒๆง˜ใซใ€MigrationsใฏLinoใซใ‚ˆใฃใฆ็ฎก็†ใ•ใ‚Œใ€ใƒ‡ใƒผใ‚ฟใƒขใƒ‡ใƒซใฎๅŒๆœŸใ‚’็ถญๆŒใงใใพใ™ใ€‚

ๅˆ—ๆŒ™ๅž‹

DDDใซใŠใ‘ใ‚‹ๅˆ—ๆŒ™ๅž‹ใฏใ€C#ใฎๅพ“ๆฅใฎenumใ‚’่ถ…ใˆใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚็Šถๆ…‹ใ‚’่กจใ™ใƒชใƒƒใƒใชใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใ‚ใ‚Šใ€ ใƒใƒชใƒ‡ใƒผใ‚ทใƒงใƒณใ‚„่ฃœๅŠฉใƒกใ‚ฝใƒƒใƒ‰ใ€ใ•ใ‚‰ใซใฏๆŒฏใ‚‹่ˆžใ„ใ‚’ๅซใ‚€ใ“ใจใŒๅฏ่ƒฝใงใ™ใ€‚

ๅ‹•ๆฉŸ๏ผš

  • C#ใฎenumใฏๆ•ดๆ•ฐใพใŸใฏๆ–‡ๅญ—ๅˆ—ใฎๅ€คใซ้™ๅฎšใ•ใ‚Œใฆใ„ใพใ™ใ€‚
  • ใ‚ฏใƒฉใ‚นใจใ—ใฆๅˆ—ๆŒ™ๅž‹ใ‚’ใƒขใƒ‡ใƒซๅŒ–ใ™ใ‚‹ใ“ใจใงใ€ใ‚ˆใ‚ŠๆŸ”่ปŸใง่กจ็พๅŠ›่ฑŠใ‹ใช่จญ่จˆใŒๅฏ่ƒฝใซใชใ‚Šใพใ™ใ€‚

ไธปใช็‰นๅพด๏ผš

  • ๅ…ฑ้€šใฎๅŸบๅบ•ใ‚ฏใƒฉใ‚นใ‚’็ถ™ๆ‰ฟใ—ใ€Idใจๅๅ‰ใ‚’ใ‚ซใƒ—ใ‚ปใƒซๅŒ–ใ—ใŸใ‚ฏใƒฉใ‚นใงใ™ใ€‚
  • ใƒใƒชใƒ‡ใƒผใ‚ทใƒงใƒณใ‚„่ฃœๅŠฉใƒกใ‚ฝใƒƒใƒ‰ใ€ๆŒฏใ‚‹่ˆžใ„ใ‚’่ฟฝๅŠ ใงใใพใ™ใ€‚

Linoใงๅˆ—ๆŒ™ๅž‹ใ‚’ไฝœๆˆใ™ใ‚‹

ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅฎŸ่กŒใ—ใฆใใ ใ•ใ„๏ผš

lino enum new

ใ‚ฆใ‚ฃใ‚ถใƒผใƒ‰ใงใฏไปฅไธ‹ใ‚’ๅฐ‹ใญใ‚‰ใ‚Œใพใ™๏ผš

  • ใ‚ตใƒผใƒ“ใ‚นใ€‚
  • ใƒขใ‚ธใƒฅใƒผใƒซ๏ผˆ่ฉฒๅฝ“ใ™ใ‚‹ๅ ดๅˆ๏ผ‰ใ€‚
  • ๅ ดๆ‰€ โ€” ใƒ‰ใƒกใ‚คใƒณใฎใƒซใƒผใƒˆใพใŸใฏใ‚ขใ‚ฐใƒชใ‚ฒใƒผใƒˆใ€‚
  • ๅˆ—ๆŒ™ๅž‹ใฎๅๅ‰ใ€‚
  • ใ‚ฟใ‚คใƒ— โ€” ๅพ“ๆฅใฎenumใ‹ใ‚นใƒžใƒผใƒˆ Enum๏ผˆclass๏ผ‰ใ€‚
  • ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใงใฎไฟๅญ˜ๆ–นๆณ• โ€” intใพใŸใฏstringใ€‚

ไพ‹

PersonStatusๅˆ—ๆŒ™ๅž‹๏ผš

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

็”Ÿๆˆใ•ใ‚ŒใŸๆง‹้€ ๏ผš

MyApp/
โ””โ”€โ”€ src/
    โ””โ”€โ”€ Services/
        โ””โ”€โ”€ MyService/
            โ””โ”€โ”€ Domain/
                โ”œโ”€โ”€ MyApp.MyService.Domain.csproj
                โ””โ”€โ”€ Aggregates/
                    โ””โ”€โ”€ People/
                        โ”œโ”€โ”€ Person.cs
                        โ”œโ”€โ”€ Enums/
                        โ”‚   โ””โ”€โ”€ PersonStatus.cs
                        โ”œโ”€โ”€ ValueObjects/
                        โ”‚   โ””โ”€โ”€ Address.cs
                        โ”œโ”€โ”€ Errors/
                        โ”‚   โ”œโ”€โ”€ AddressErrors.cs
                        โ”‚   โ””โ”€โ”€ PersonErrors.cs
                        โ”œโ”€โ”€ Repositories/
                        โ”‚   โ””โ”€โ”€ IPersonRepository.cs
                        โ””โ”€โ”€ Resources/
                            โ”œโ”€โ”€ Address/
                            โ”‚   โ”œโ”€โ”€ AddressResources.resx
                            โ”‚   โ”œโ”€โ”€ AddressResources.en.resx
                            โ”‚   โ””โ”€โ”€ AddressResources.pt-BR.resx
                            โ”œโ”€โ”€ Person/
                            โ”‚   โ”œโ”€โ”€ PersonResources.resx
                            โ”‚   โ”œโ”€โ”€ PersonResources.en.resx
                            โ”‚   โ””โ”€โ”€ PersonResources.pt-BR.resx
                            โ””โ”€โ”€ PersonStatus/
                                โ”œโ”€โ”€ PersonStatusResources.resx
                                โ”œโ”€โ”€ PersonStatusResources.en.resx
                                โ””โ”€โ”€ PersonStatusResources.pt-BR.resx

ๅˆ—ๆŒ™ๅž‹ใฎๅ€คใ‚’stringใจใ—ใฆไฟๅญ˜ใ™ใ‚‹ใ“ใจใ‚‚ๅฏ่ƒฝใงใ€ๅฏ่ชญๆ€งใŒๅ‘ไธŠใ—ใพใ™ใŒใ€ ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใ‚„ใ‚นใƒˆใƒฌใƒผใ‚ธๅŠน็އใงใฏๅŠฃใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ ใใฎใŸใ‚ใ€intใจใ—ใฆไฟๅญ˜ใ—ใ€ๆ•ดๅˆๆ€งใฎ็ถญๆŒใ‚„ไฟๅฎˆๆ€งๅ‘ไธŠใฎใŸใ‚ใซใ€ ๅˆ—ๆŒ™ๅž‹ใฎๅ€คใ‚’ไธปใ‚ญใƒผใจใ™ใ‚‹่ฃœๅŠฉ็š„ใชใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃ๏ผˆใƒ†ใƒผใƒ–ใƒซ๏ผ‰ใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใ‚’ๆŽจๅฅจใ—ใพใ™ใ€‚

ๅˆ—ๆŒ™ๅž‹ใ‚’ๅฎš็พฉใ—ใŸๅพŒใฏใ€Linoใ‚’ไฝฟใฃใฆMigrationsใ‚’็”Ÿๆˆใƒป้ฉ็”จใ—ใ€ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใŒใƒ‰ใƒกใ‚คใƒณใƒขใƒ‡ใƒซใ‚’ๅๆ˜ ใ™ใ‚‹ใ‚ˆใ†ใซใ—ใฆใใ ใ•ใ„ใ€‚ ่ฉณ็ดฐใฏๆฐธ็ถšๅŒ–ๅฑคใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใง่ชฌๆ˜Žใ—ใพใ™ใ€‚

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