How Do I Split a Model Into Contexts?
Split a model into contexts when ownership and dependency boundaries matter. Contexts are semantic boundaries, not folders or deployment units.
Put Shared Vocabulary In Its Own Context
Shared actors, shapes, and events can be owned by a shared context. Domain contexts then declare an explicit dependency when they need that vocabulary.
language dcl 0.9
context Shared {
actor Customer is human
shape SharedOrderInput {
orderId: Uuid required
customerId: Uuid required
}
event SharedOrderSubmitted is {
orderId: Uuid required
}
}
language dcl 0.9
context Sales {
depends on Shared
effect PersistSalesOrder is persistence
capability AcceptSalesOrder {
intent SharedOrderInput from Customer
outcomes {
SalesOrderAccepted
SalesOrderDeferred
}
effect PersistSalesOrder
observe {
event SharedOrderSubmitted count as shared_orders_submitted
outcome SalesOrderAccepted count as sales_orders_accepted
}
when {
PersistSalesOrder unresolved then SalesOrderDeferred
otherwise then SalesOrderAccepted
}
}
}
Compile The Files Together
go run ./cmd/dcl check ../website/src/examples/context-shared.dcl ../website/src/examples/context-sales.dcl