A bounded context is a clear boundary. Inside it, one model and one ubiquitous language apply in the same way everywhere. (The ubiquitous language is the shared vocabulary that developers and domain experts use, both in conversation and in the code.)
The same word can mean different things in different contexts. For example, a "Product" in the catalog context has descriptions and images. In the shipping context, a "Product" has weight and dimensions. So we don't build one huge shared model. Each context keeps its own model. A context map describes how the contexts relate to each other.
An anti-corruption layer (ACL) is a translation layer. A context puts it between itself and another model it must use, usually a legacy system or a third-party API. The ACL stops foreign concepts from leaking into your own model.
Example: a new billing context uses an old ERP system. The ERP's customer record has codes like CUST_TYP=3. The ACL calls the ERP. Then it maps the response into billing's own Customer, with a CustomerTier value object. When the ERP changes, only the ACL changes.
- A bounded context is a boundary where one model and one language stay consistent.
- The same term can have different models in different contexts.
- A context map describes how contexts relate to each other.
- An ACL translates a foreign or legacy model into your own model.
- When the other system changes, only the ACL needs to change.