Loading...
Loading...
Write Domain-Driven Design architecture models using DomainLang (.dlang files). Covers domains, bounded contexts, context maps, teams, classifications, terminology, relationships, namespaces, and imports. Use when creating DDD models, mapping bounded context relationships, documenting ubiquitous language, or generating .dlang files for strategic design.
npx skill4agent add domainlang/domainlang domainlang.dlangDomain Sales {
description: "Revenue generation"
vision: "Make buying easy"
}
// Subdomains use 'in'
Domain OnlineSales in Sales {
description: "Digital sales channel"
}Classification CoreDomain
Classification SupportingDomain
Classification GenericSubdomain
Team SalesTeam
Team PlatformTeambc Orders for Sales as CoreDomain by SalesTeam {
description: "Order lifecycle and orchestration"
terminology {
term Order: "A customer's request to purchase"
aka PurchaseOrder
examples "Order #12345"
term OrderLine: "A single item in an order"
}
decisions {
decision EventSourcing: "Capture every state change"
policy Refunds: "Allow refunds within 30 days"
rule MinOrder: "Minimum order is $10"
}
metadata {
Language: "TypeScript"
}
}forasbyclassification:team:bc Orders for SalesterminologyglossarymetadatametadecisionsrulesrelationshipsintegrationsMetadata Language
Metadata Repository
bc Orders for Sales {
metadata {
Language: "TypeScript"
Repository: "github.com/acme/orders"
}
}ContextMap SalesSystem {
contains Orders, Billing, Shipping
[OHS] Orders -> [CF] Billing
[ACL] Shipping <- Orders
[P] Orders <-> [P] Inventory
Orders >< LegacySystem
}-><-<->><| Pattern | Abbreviation | Meaning |
|---|---|---|
| Open Host Service | | Well-defined protocol for consumers |
| Conformist | | Adopts upstream model without translation |
| Anti-Corruption Layer | | Translates between models to protect downstream |
| Published Language | | Shared documented language for integration |
| Shared Kernel | | Shared subset of the domain model |
| Partnership | | Two contexts coordinate development together |
thisbc Orders for Sales {
relationships {
[OHS] this -> [CF] Billing
[ACL] this <- Payments
}
}DomainMap Portfolio {
contains Sales, Support, Platform
}Namespace Acme.Sales {
bc Orders for Sales {}
}
// Reference with FQN
ContextMap System {
contains Acme.Sales.Orders
}import "./shared/teams.dlang"
import "../common/classifications.dlang"
import "acme/ddd-core" as Core
bc Orders for Core.SalesDomain {}model.yaml// Line comment
/* Block comment */
// All equivalent:
description: "Using colon"
vision = "Using equals"
team is SalesTeamforakaexamples.dlangmy-project/
├── model.yaml
├── index.dlang
├── shared/
│ ├── teams.dlang
│ └── classifications.dlang
└── domains/
├── sales/
│ └── index.dlang
└── shipping/
└── index.dlangindex.dlangmodel.yamlmodel:
name: my-company/domain-model
version: 1.0.0
entry: index.dlang
paths:
"@": "./"
"@shared": "./shared"
dependencies:
acme/ddd-core: "v1.0.0"Classification CoreDomain
Classification SupportingDomain
Team OrderTeam
Team ShippingTeam
Domain ECommerce {
description: "Online retail platform"
vision: "Seamless shopping experience"
}
Metadata Language
bc Orders for ECommerce as CoreDomain by OrderTeam {
description: "Order lifecycle from cart to delivery"
terminology {
term Order: "A customer's request to purchase items"
term Cart: "Temporary collection of items before purchase"
}
metadata {
Language: "TypeScript"
}
}
bc Shipping for ECommerce as SupportingDomain by ShippingTeam {
description: "Package routing and delivery tracking"
terminology {
term Shipment: "A collection of packages traveling together"
term Carrier: "The company performing delivery"
}
}
ContextMap ECommerceIntegration {
contains Orders, Shipping
[OHS] Orders -> [CF] Shipping
}DomaindomBoundedContextbcContextMapcmapDomainMapdmapNamespacensTeamClassificationMetadataImportimportforasbyterminologyglossarydecisionsrulesmetadatametarelationshipsintegrationstermdecisionpolicyruleakasynonymsexamplesDomainLang.vscode-domainlangdomainlang_validatedomainlang_listdomainlang_getdomainlang_explainnpm install -g @domainlang/clidlang installdlang model treedlang model statusnpm install @domainlang/language