In Domain-Driven Design (DDD), a Context Map is a tool used to visualize and define the relationships between different bounded contexts within a system. It helps to identify how different parts of a system interact, collaborate, or are isolated from one another. Here's a detailed explanation of a Context Map in DDD:
Key Concepts:
- Bounded Context:
- A Bounded Context represents a logical boundary where a particular model is defined and applied. It is the scope within which a domain model is valid and consistent.
- In large systems, multiple bounded contexts exist, each representing a specific subdomain or area of the business. These bounded contexts can have their own language (ubiquitous language), rules, and data structures.
- Context Map:
- A Context Map shows how different bounded contexts in a system are related and interact with one another.
- It captures the integration patterns between bounded contexts and how they communicate.
- It provides a high-level view of the entire system, helping teams manage complexity by making the relationships and dependencies between bounded contexts explicit.
Common Patterns on a Context Map:
When defining the relationships between bounded contexts, DDD identifies several integration patterns. These patterns describe how bounded contexts interact. Some common patterns include:
- Shared Kernel: Two or more teams agree to share a part of their models, often a small subset of the domain model. They collaborate closely to maintain consistency.
- Customer-Supplier: One context (the supplier) provides functionality that another context (the customer) depends on. The customer can influence the supplier’s development to ensure it meets their needs.
- Conformist: One bounded context (the conformist) adopts the model and design choices of another context without influencing it. This happens when the conformist context has no control over the upstream model.
- Anti-Corruption Layer: To prevent one context’s model from contaminating another, a boundary is created where translations occur between the models. This prevents "model pollution" when integrating different systems.
- Open Host Service (OHS): A bounded context exposes well-defined services or APIs that other contexts can consume, making integration easier.
- Published Language: A bounded context shares information in a common format, such as XML or JSON, that other contexts can consume. It facilitates communication between systems with different models.
Importance of a Context Map:
- Clarity in Collaboration: It clarifies how different teams and systems within an organization collaborate, reducing misunderstandings and conflicting models.
- Manage Complexity: As systems grow, the number of bounded contexts increases, making it important to clearly define how they relate to avoid integration issues.
- Strategic Design: Helps in making strategic decisions about how contexts should interact, allowing teams to align business and technical concerns.
Example:
Imagine a large e-commerce system with different bounded contexts, such as Inventory, Billing, Shipping, and Customer Support. Each context might have its own data models and services. A context map would illustrate how the Billing context integrates with the Inventory and Shipping contexts, potentially using patterns like a Shared Kernel for common data, or an Anti-Corruption Layer to translate models between them.
In summary, the Context Map is a powerful tool in DDD for visualizing and managing the complexity of interactions between bounded contexts, helping teams to build more scalable and maintainable systems.