---
url: /core/strategic.md
description: >-
  Strategic Domain-Driven Design in TypeScript: split a system into bounded
  contexts and decide how they talk without sharing their models.
---

# Strategic

Strategic design splits a system into bounded contexts, each with its own model, and decides how
they talk without sharing that model.

## Why

The catalog knows a product by its name, photos and stock. Ordering only needs its price. If
ordering imports the catalog's `Product` class, every change in the catalog breaks ordering, and
the two teams can no longer move alone.

::: tip The fix
Each context keeps its model to itself. They exchange plain JSON through a documented entry point,
and each side translates it into its own words.
:::

## How the contexts meet

## The building blocks

| Building block | What it is | Use it when |
| --- | --- | --- |
| [Published Language](./published-language.md) | The JSON format exchanged between contexts. | Data crosses a context boundary, as a question, an answer or an event. |
| [Open host services](./open-host-services.md) | The documented entry point of a context, the only class others may import. | Another context needs to ask yours something. |
| [Anti-corruption layers](./anti-corruption-layers.md) | The adapter that reads another context and translates it into yours. | Your context needs something from another one. |

The events a context sends to the others are [integration events](../application/integration-events.md),
written in the published language.

## See also

* [Bounded contexts](../../guide/project-layout.md#bounded-contexts) in the project layout
* Rule: [`strategic/no-cross-context-import`](../../rules/strategic/no-cross-context-import.md)
* [Domain](../domain/index.md), the model inside each context
