Concept Map of the Domain Driven Design Patterns

May 17, 2025 · View on GitHub

Diagram

Concept Map of the Domain Driven Design Patterns

Description

Shows the concepts of Domain Driven Design and their relationships.

Concepts

ConceptDescription
Abstract CoreThe most fundamental differentiating concepts in the model, factored into distinct classes, abstract classes, or interfaces.
AggregatesAggregates are collections of entities and value objects with their associations and form a transactional unit. Aggregates are referenced as a whole by an aggregate root entity, parts of the aggregate must not be referenced from outside. The aggregate root is responsible for the enforcement of the busines rules and invariants of the aggregate.
Anti-Corruption LayerThe anti-corruption layer is an architectural layer to separate the domain model from outside models. It enables the domain model to access the data of the outside model as expected by the domain model. In a clean architecture, an adapter is the place to implement the anti- corruption layer by mapping the outside model to the domain model.
Assertionsstate post-conditions of operations and invariants of classes and aggregates
Big Ball of MudA Big Ball of Mud is a casually, even haphazardly, structured system. Its organization, if one can call it that, is dictated more by expediency than design. Yet, its enduring popularity cannot merely be indicative of a general disregard for architecture.
Bounded ContextA descrition of a boundary (typically a subsystem or the work of a particular team) within which a particular model is defined and applicable.
Building BlocksPart II: The Building Blocks of a Model-Driven Design
Clean Architecture
Closure of Operationsdefine an operation whose return type is the same as the type of its argument(s)
Cohesive Mechanisms
Conceptual Contoursdecompose design elements into cohesive units
Conformist
ContextThe setting in which a word or statement appears that determines its meaning. Statements about a model can only be understood in a context.
Context MapThe context map provides an overview for all models and their boundaries and interfaces.
Context MappingPart IV: Context Mapping for Strategic Design
Continuous IntegrationA process of merging all code and other implementation artifacts frequently, with automated tests to flag fragmentation quickly.
Core DomainThe most valuable part of the domain model.
Customer/SupplierA clear relationship between two teams, where the downstream team is the customer of the upstream team.
Declarative Design
DistillationPart V: Distillation for Strategic Design
DomainA sphere of knowledge, influence or activity. The subject area to which a user applies a program is the domain of the software.
Domain Driven DesignAn approach to the development of complex software in which we focus on the core domain, explore models in a creative collaboration of domain practitioners and software practitioners, and speak a ubiquitous language within an explicitly bounded context.
Domain EventsA domain object to propagate relevant domain activities in a distributed system.
Domain Vision StatementA short description of the core domain and the value it will bring.
EntitiesObjects in the domain model which are defined by their identity rather than by their state. For example a Person is normally modelled as an entity. It represents the same person even when the attributes change. It is also a different person, even if it has the same state as another person.
Established Formalisms
Evolving OrderA conceptual large-scale structure that evolves with the application, possibly changing to a completely different type of structure along the way.
FactoriesA domain object for the creation of complex domain objects which enforce the invariants of these objects on creation.
Generic SubdomainsA cohesive subdomain that is not the motivation for the project and does not capoure specialized knowledge.
Hands On ModellersDevelopers must be involved with the model and have contact with domain experts.
Highlighted CoreDescribes the core elements of the domain and their interactions.
Intention-Revealing Interfacesname classes and operations to describe their effect and purpose
Knowledge-levelA distinct set of objects that can be used to describe and constrain the structure and behavior of the basic model.
Large Scale Structure
Large-scale StructurePart VI: Large-scale Structure for Strategic Design
Layered ArchitectureIsolates the expression of the domain model and the business logic, and eliminates any dependency on infrastructure, user interface, or application logic that is not business logic.
ModelA system of abstractions that describes selected aspects of a domain and can be used to solve problems related to that domain.
Model Driven Design
Modules
Open Host ServiceAn open protocol that gives access to your subsystem as a set of services.
PartnershipA partnership between the teams in charge of the two contexts, when the teams will succeed or fail together.
Pluggable Component FrameworkA framework that allows diverse implementations of those interfaces to be freely substituted.
Published LanguageA well-documented shared language that can express the necessary domain information as a common medium of communication, translating as necessary into and out of that language.
Putting the Model to WorkPart I: Putting the Model to Work
RepositoriesQuery access to aggregates expressed in the ubiquitous language
Responsibility Layers
Segregated Core
Separate WaysA bounded context with no connection to the others at all, allowing developers to find simple, specialized solutions within this small scope.
Servicescontains functionality which is not the responsiblity of an entity or value object
Shared Kernel
Side-Effect-Free Functionsimplement logic with functions that return results without observable side effects
Standalone Classeswhen possible create classes that are self-contained and can be understood alone
Supple DesignPart III: Supple Design
System Metaphor
Ubiquitous LanguageA language around the domain model used by all team members within a bounded context to connect all the activities of the team with the software.
Value ObjectsAn object in the domain model, which has no conceptional identity but are identified by their state. Value objects should be modelled as immutable.
freeA software development context in which the direction, success or failure of development work in other contexts has little effect on delivery.
mutually dependentA situation in which two software development projects in separate contexts must both be delivered in order for either to be considered a success.
upsteam-downstreamA relationship between two groups in which the “upstream” group’s actions affect project success of the “downstream” group, but the actions of the downstream do not significantly affect projects upstream.

Other Relationships

FromNameToDescription
Entitiesaccess withRepositories
Aggregatesaccess withRepositories
Entitiesact as root ofAggregates
Bounded Contextassess/overview relationships withContext Map
Core Domainavoid overinvesting inGeneric Subdomains
Evolving Orderconcepts enterCore Domain
Context Mapcoordinate interdependent contextsPartnership
Context Mapcoordinate upstream/downstreamCustomer/Supplier
Core Domainculivate rich model withUbiquitous Language
Model Driven Designdefine model withinBounded Context
Intention-Revealing Interfacesdraw fromUbiquitous Language
Entitiesencapsulate withAggregates
Value Objectsencapsulate withAggregates
Value Objectsencapsulate withFactories
Entitiesencapsulate withFactories
Aggregatesencapsulate withFactories
Model Driven Designexpress change withDomain Events
Model Driven Designexpress identity withEntities
Model Driven Designexpress model throughIntention-Revealing Interfaces
Model Driven Designexpress model withServices
Model Driven Designexpress state and computation withValue Objects
Open Host Serviceformalized asPublished Language
Context Mapfree teams to goSeparate Ways
Model Driven Designisolate domain expressions withClean Architecture
Bounded Contextkeep model unified withContinuous Integration
Intention-Revealing Interfacesmake safe and simpleSide-Effect-Free Functions
Intention-Revealing Interfacesmake side effects explicit withAssertions
Model Driven Designmodel gives structure toUbiquitous Language
Ubiquitous Languagemodel out loudCore Domain
Bounded Contextnames enterUbiquitous Language
Context Mapoverlap contextsShared Kernel
Context Mapoverlap unilaterally asConformist
Core Domainpoint the way withDomain Vision Statement
Entitiespush state change withDomain Events
Model Driven Designreduce cost of change withConceptual Contours
Context Mapseggregate the conceptual messesBig Ball of Mud
Model Driven Designsimplify interpretion withStandalone Classes
Core Domainstructure throughEvolving Order
Context Mapsupport multiple clients throughOpen Host Service
Context Maptranslate and isolate unilaterally withAnti-Corruption Layer
Core Domainwork in autonomous, cleanBounded Context

List of views in namespace

List of all Views

(generated by Overarch with template docs/view.md.cmb)