ドメインモデリング
ใใกใคใณ้งๅ่จญ่จใขใใชใฑใผใทใงใณใฎไธญๅฟใซใฏใใทในใใ ใฎไธญๆ ธ็ใช็ฅ่ญใจใใธใในใซใผใซใ่กจใใขใใซใใใใพใใใใกใคใณใ้ฉๅใซใขใใชใณใฐใใใใจใฏใ็พๅฎไธ็ใฎๆฆๅฟตใ่กจ็พๅ่ฑใใงใไธ่ฒซๆงใใใใใพใจใพใใฎใใใฝใใใฆใงใขๆง้ ใซๅคๆใใใใจใๆๅณใใพใใ
ใจใณใใฃใใฃ
ใจใณใใฃใใฃใจใฏใไธปใซใใฎ่ญๅฅๆงใซใใฃใฆๅฎ็พฉใใใใชใใธใงใฏใใงใใใๅใซๅฑๆงใ ใใงๅฎ็พฉใใใใใฎใงใฏใใใพใใใ ๅฑๆงใๆ้ใฎ็ต้ใจใจใใซๅคใใฃใฆใใใจใณใใฃใใฃใฎ่ญๅฅๆงใฏๅคใใใพใใใ
ไธปใช็นๅพด๏ผ
- ไธๆใฎ่ญๅฅๅญใๆใค๏ผ้ๅธธใฏ
Id๏ผใ - ้่ฆใชใฎใฏใจใณใใฃใใฃใไฝใๅซใใงใใใใงใฏใชใใ่ชฐใงใใใใงใใ
- ๅฑๆงใฏๆ้ใจใจใใซๅคๅใใใใจใใใใพใใ
Linoใงใจใณใใฃใใฃใไฝๆใใ
Linoใไฝฟใฃใฆๆฐใใใจใณใใฃใใฃใไฝๆใใใซใฏใไปฅไธใๅฎ่กใใพใ๏ผ
lino entity new
CLIใฆใฃใถใผใใไปฅไธใๅฐใญใพใ๏ผ
- ใตใผใใน โ ใจใณใใฃใใฃใไฝๆใใใตใผใในใ
- ใขใธใฅใผใซ โ ใจใณใใฃใใฃใไฝๆใใใขใธใฅใผใซ๏ผใขใธใฅใฉใผใตใผใในใฎๅ ดๅ๏ผใ
- ใจใณใใฃใใฃๅ โ ใใกใคใณใใใณใใผใฟใใผในใใผใใซใงไฝฟ็จใใใๅๅใ
ใใฎๅพใๅใใฃใผใซใใ่จญๅฎใใฆใจใณใใฃใใฃใๆงๆใใพใใ
ๅฉ็จๅฏ่ฝใชใใฃใผใซใใฟใคใ
| ใฟใคใ | ่ชฌๆ | ็ฏๅฒ๏ผๅ่ |
|---|---|---|
short | 16ใใใๆดๆฐ | -32,768 ๏ฝ 32,767 |
int | 32ใใใๆดๆฐ | -2,147,483,648 ๏ฝ 2,147,483,647 |
long | 64ใใใๆดๆฐ | -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 | ไธๅคใฎ 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ใซใใฃใฆ็ๆใใใๆง้ :
<ProjectName>/
โโโ src/
โโโ Services/
โโโ <ServiceName>/
โโโ Domain/
โโโ <ProjectName>.<ServiceName>.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ใ็ฎก็ใใใใผใฟใใผในใๅๆใใใพใใ ใใฎใใญใปในใฏใๆฐธ็ถๅใฌใคใคใผใใปใฏใทใงใณใง่ฉณใใ่ชฌๆใใพใใ
็พๅจใฎ้ฒๅใฏใผใฏใใญใผ
lino entity new ใฎๅฏพ่ฉฑๅใใญใผใซๅ ใใฆใใตใผใในใใขใธใฅใผใซใๅๅใใใงใซๅใใฃใฆใใๅ ดๅใฏใCLI ใฎใณใใณใไธใงๆๅณใๆ็คบใงใใพใ๏ผ
lino entity new --name <EntityName> --service <ServiceName> --module <ModuleName> lino entity edit --service <ServiceName> --module <ModuleName> --entity <EntityName> lino entity list --service <ServiceName> --module <ModuleName>
ๅคงใใชใขใธใฅใผใซใงๆฐใใๆฆๅฟตใไฝๆใใๅใซใentity list ใไฝฟ็จใใฆใใ ใใใ็ทจ้ๆใซใฏใ่ญๅฅๅญใใใญใใใฃใๅฟ
้ ๆงใ้ทใใใชใฌใผใทใงใณใใคใณใใใฏในใownershipใtenantใmigrations ใธใฎๅฝฑ้ฟใ็ขบ่ชใใพใใ
Strongly Typed IDsใownershipใinvariants
Strongly Typed IDs ใๆๅนใชๅ ดๅใ่ญๅฅๅญใฏ ProductId ใฎใใใชๅฐ็จๅใซใชใใ็ฐใชใใจใณใใฃใใฃใฎ IDs ใ่ชคใฃใฆๅใ้ใใๅฏ่ฝๆงใๆธใใใพใใใชใฌใผใทใงใณใฏใใกใคใณไธใฎๅฎ้ใฎ ownership ใๅๆ ใใในใใงใใใในใฆใฎๅ็
งใ็ดๆฅใใใฒใผใทใงใณใซใใๅฟ
่ฆใฏใชใใๅคใใฎๅ ดๅใ่ญๅฅๅญใshadow entityใintegration eventใใพใใฏๆ็คบ็ใชใฏใจใชใฎๆนใใขใธใฅใผใซๅข็ใใใใใไฟ่ญทใใพใใ
invariants ใฏ UIใใใผใฟใใผในใvalidators ใ ใใงใชใใใใกใคใณใซ็ฝฎใใฆใใ ใใใใจใณใใฃใใฃใๅคๆดใใๅพใฏใbuild ใๅฎ่กใใdiff ใ็ขบ่ชใใฆใmigrations ใ็ๆใพใใฏๆดๆฐใใพใใ
Value Object
Value Objectใฏใใใฎๅฑๆงใฎใฟใงๅฎ็พฉใใใใใกใคใณใฎๆฆๅฟตใ่กจใใๅบๆใฎ่ญๅฅๅญใๆใกใพใใใใในใฆใฎๅคใๅใๅ ดๅใไบใคใฎValue Objectใฏ็ญใใใจ่ฆใชใใใพใใ
ไธปใช็นๅพด๏ผ
- ไฝๆๅพใฏไธๅคใงใใ
Idใๆใกใพใใใ
Linoใง Value Object ใไฝๆใใ
ๆฌกใๅฎ่กใใฆใใ ใใ๏ผ
lino value-object new
CLIใฏไปฅไธใๅฐใญใพใ๏ผ
- ใตใผใใน โ ใชใใธใงใฏใใไฝๆใใใตใผใในใ
- ใขใธใฅใผใซ โ ใชใใธใงใฏใใไฝๆใใใขใธใฅใผใซ๏ผใขใธใฅใผใซใตใผใในใฎใฟ๏ผใ
- ๅ ดๆ โ ใใกใคใณใซใผใใพใใฏ็นๅฎใฎใขใฐใชใฒใผใใ
- Value Object ใฎๅๅใ
ๆฌกใซใใชใใธใงใฏใใๆงๆใใใใฃใผใซใใๅฎ็พฉใใพใใ
ๅฉ็จๅฏ่ฝใชใใฃใผใซใใฟใคใ
| ใฟใคใ | ่ชฌๆ | ๅ่ |
|---|---|---|
short | 16ใใใๆดๆฐ | -32,768 โ 32,767 |
int | 32ใใใๆดๆฐ | -2,147,483,648 โ 2,147,483,647 |
long | 64ใใใๆดๆฐ | -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ไปฅไธ |
ไพ
Value Object 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๏ผ๏ผ
<ProjectName>/
โโโ src/
โโโ Services/
โโโ <ServiceName>/
โโโ Domain/
โโโ <ProjectName>.<ServiceName>.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ใซใใฃใฆ็ฎก็ใใใใใผใฟใขใใซใฎๅๆใ็ถญๆใงใใพใใ
็พๅจใฎ้ฒๅใฏใผใฏใใญใผ
ๅฏพ่ฉฑๅใณใใณใใซๅ ใใฆใใใฎๆฆๅฟตใใฉใใซไฝๆใในใใๅใใฃใฆใใๅ ดๅใฏใใฉใกใผใฟใผใไฝฟ็จใใพใ๏ผ
lino value-object new --name <ValueObjectName> --service <ServiceName> --module <ModuleName> lino value-object edit --service <ServiceName> --module <ModuleName> --value-object <ValueObjectName> lino value-object list --service <ServiceName> --module <ModuleName>
ใจใณใใฃใใฃใฎใใญใใใฃใ ValueObject ใจใใฆๅฎฃ่จใใใฆใใๅ ดๅใLino ใฏๆขๅญใฎ Value Object ใๅๅฉ็จใใใใใจใณใใฃใใฃใขใใชใณใฐไธญใซๆฐใใใใฎใไฝๆใงใใพใใใใฃใผใซใ็พคใใ้ใไฝๆใๅฏธๆณใๆ้ใใใญใฅใกใณใใฎใใใชๅไธใฎๆฆๅฟตใ่กจใๅ ดๅใฏใใใฎ้ธๆ่ขใๅชๅ
ใใฆใใ ใใใ
ๆฐธ็ถๅใUIใใญใผใซใฉใคใผใผใทใงใณ
Lino ใฏใขใธใฅใผใซใฎๆฐธ็ถๅใฌใคใคใผใ้ใใฆ Value Objects ใฎใใญใใใฃใใใใใณใฐใใ่กจ็คบใกใฟใใผใฟใ resources ใซๆธกใใพใใใใใซใใใใในใใใใๅคใซๅฏพใใฆใญใผใซใฉใคใบใใใ labels ใจใกใใปใผใธใๆไพใงใใพใใValue Object ใฏ็ๆใใใใขใธใฅใผใซใซๅฑใใๆ็คบ็ใช integration ใใชใ้ใใใขใธใฅใผใซ้ใฎๅ ฑๆๅฅ็ดใซใฏใชใใพใใใ
invariants ใฏๅใใฎใใฎใงไฟ่ญทใใฆใใ ใใใ่ฒ ใฎๅคใ็กๅนใช้่ฒจใ้่ปขใใๆ้ใไธๆญฃใชๅฝขๅผใฎใใญใฅใกใณใใๆๅนใชใใฎใจใใฆ็ๆใใใฆใฏใใใพใใใ
ๅๆๅ
DDDใซใใใๅๆๅใฏใC#ใฎๅพๆฅใฎenumใ่ถ
ใใใใจใใงใใพใใ็ถๆ
ใ่กจใใชใใใชใชใใธใงใฏใใงใใใ
ใใชใใผใทใงใณใ่ฃๅฉใกใฝใใใใใใซใฏๆฏใ่ใใๅซใใใจใๅฏ่ฝใงใใ
ๅๆฉ๏ผ
- C#ใฎ
enumใฏๆดๆฐใพใใฏๆๅญๅใฎๅคใซ้ๅฎใใใฆใใพใใ - ใฏใฉในใจใใฆๅๆๅใใขใใซๅใใใใจใงใใใๆ่ปใง่กจ็พๅ่ฑใใช่จญ่จใๅฏ่ฝใซใชใใพใใ
ไธปใช็นๅพด๏ผ
- ๅ
ฑ้ใฎๅบๅบใฏใฉในใ็ถๆฟใใ
Idใจๅๅใใซใใปใซๅใใใฏใฉในใงใใ - ใใชใใผใทใงใณใ่ฃๅฉใกใฝใใใๆฏใ่ใใ่ฟฝๅ ใงใใพใใ
Linoใงๅๆๅใไฝๆใใ
ไปฅไธใฎใณใใณใใๅฎ่กใใฆใใ ใใ๏ผ
lino enumeration new
ใฆใฃใถใผใใงใฏไปฅไธใๅฐใญใใใพใ๏ผ
- ใตใผใในใ
- ใขใธใฅใผใซ๏ผ่ฉฒๅฝใใๅ ดๅ๏ผใ
- ๅ ดๆ โ ใใกใคใณใฎใซใผใใพใใฏใขใฐใชใฒใผใใ
- ๅๆๅใฎๅๅใ
- ใฟใคใ โ ๅพๆฅใฎ
enumใในใใผใ Enum๏ผclass๏ผใ - ใใผใฟใใผในใงใฎไฟๅญๆนๆณ โ
intใพใใฏstringใ
ไพ
PersonStatusๅๆๅ๏ผ
โโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ โ Value โ Name โ Display Name โ โโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโค โ 1 โ Active โ Active โ โโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโค โ 2 โ Inactive โ Inactive โ โโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโค โ 3 โ Suspended โ Suspended โ โโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโโโค โ 4 โ Deleted โ Deleted โ โโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโโ
็ๆใใใๆง้ ๏ผ
<ProjectName>/
โโโ src/
โโโ Services/
โโโ <ServiceName>/
โโโ Domain/
โโโ <ProjectName>.<ServiceName>.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ใ็ๆใป้ฉ็จใใ ใใผใฟใใผในใใใกใคใณใขใใซใๅๆ ใใใใใซใใฆใใ ใใใ ่ฉณ็ดฐใฏๆฐธ็ถๅๅฑคใฎใปใฏใทใงใณใง่ชฌๆใใพใใ
็พๅจใฎ้ฒๅใฏใผใฏใใญใผ
ๅฏพ่ฉฑๅใณใใณใใซๅ ใใฆใๅ ดๆใจๅๅใใใงใซๅฎ็พฉใใใฆใใๅ ดๅใฏใใฉใกใผใฟใผใไฝฟ็จใใพใ๏ผ
lino enumeration new --name <EnumerationName> --service <ServiceName> --module <ModuleName> lino enumeration edit --service <ServiceName> --module <ModuleName> --enumeration <EnumerationName> lino enumeration list --service <ServiceName> --module <ModuleName>
Enumerationใใจใณใใฃใใฃใใพใใฏ่จญๅฎ
| Enumeration ใไฝฟใ | ใจใณใใฃใใฃใพใใฏ่จญๅฎใไฝฟใ |
|---|---|
| ๆณจๆในใใผใฟในใๅ ฌ้็ถๆ ใๆ่ก็ใช้ฃๆบใฟใคใ | ใฆใผใถใผใ็ฎก็ใใใซใใดใชใtenant ใใจใซ่จญๅฎใงใใ็็ฑใbackoffice ใง็ฎก็ใใใใตใใฉใคใคใผ |
| ใณใผใใจใจใใซใใผใธใงใณ็ฎก็ใใใๅค | runtime ใงๅคๆดใใใๅคใใพใใฏๆจฉ้ใงๅถๅพกใใใๅค |
| ๅคใใจใฎๅ็ดใชใซใผใซใพใใฏๅฐใใชๆฏใ่ใ | ใฉใคใใตใคใฏใซใ็ฃๆปใๅ็็ฟป่จณใใพใใฏ็ฌ่ชใฎใชใฌใผใทใงใณ |
Enumeration ใ่กจ็คบๅใๅ ฌ้ใใๅ ดๅใLino ใฏใญใผใซใฉใคใบใใใ labels ็จใฎ resources ใ็ๆใงใใพใใๆฐธ็ถๅใใใๅ ดๅใ seed data ใจใใฆไฝฟใใใๅ ดๅใฏใๅคใฎ่ฟฝๅ ใๅ้คใๅๅๅคๆดใฎๅพใซ migrations ใ็ขบ่ชใใฆใใ ใใใใณใผใใใใผใฟใใผในใUI ใฎๆดๅๆงใใใกใคใณๅคๆดใฎไธ้จใงใใ
