A domain object with identity and lifecycle
A domain entity is an object defined by identity and a lifecycle. A customer who changes her name, address, and email over five years is still the same customer; the thread of continuity that survives every attribute change is what makes her an entity. The discipline lives in deciding when identity actually matters, because not everything in a model deserves to be tracked through time.
Eric Evans named the distinction in Domain-Driven Design (2003). His formulation is that many objects "are not fundamentally defined by their attributes, but rather by a thread of continuity and identity." An entity needsNeedUserA user need, pain, desire, or constraintView reference → a way to answer one question after time has passed: is this the same object? A value objectValue ObjectEngineeringA DDD value objectView reference →, by contrast, is defined entirely by its attributes, holds no identity of its own, and two value objects with equal attributes are interchangeable.
Evans' contribution was to tie the choice to the domain model and its language, so that identity becomes a modelling decisionDecisionStrategyA recorded decision with context, rationale, and consequencesView reference → about the business, not a database artefact. The practical test he gave: if you care whether two things are the same one (this order, that order), it is an entity; if you only care that two things are equal (this £20, that £20), it is a value object.
The line has stayed stable, and the live debate has moved to how strictly to apply it. Functional and event-sourced styles push more concepts toward immutable value objects and reconstruct identity from a stream of events, which narrows the set of things modelled as mutable entities. The judgement Evans asked for is the same one teams still make.
A logistics platform models a Shipment as a domain entity with a shipment_id assigned at creation. Over its life the shipment moves through booked, in-transit, customs-held, and delivered; its carrier changes twice, its estimated arrival is revised nine times, and its weight is corrected after a re-scan. None of these attribute changes creates a new shipment. The identity is stable, so a dispute three months later can be settled by replaying that one shipment's history.
The same platform models the delivery Address as a value object. When a customer corrects a typo in a postcode, the system replaces the old value with a new one, because no one needs to ask whether two addresses are the same instance, only whether they are equal.
In the Unified Product Graph, Domain EntityEngineeringA DDD domain entity sits in the Engineering & Platform region, whose mental model runs from bounded contextBounded ContextEngineeringA DDD bounded context defining a service boundaryView reference → through service to the leaves that carry domain meaning. It is held by its aggregate via domain_entityAggregatecontainsDomain Entityhierarchy, the hierarchy edge that encodes Evans' consistency boundary. Two semantic and causal edges then connect it outward: aggregate_contains_domain_entityAPI EndpointreferencesDomain Entitysemantic records which endpoints expose or accept it, and api_endpoint_references_domain_entityData FlowtransportsDomain Entitycausal traces it as it moves between services. Together these make a single question answerable across the graph: where does this identity-bearing concept live, who reads it, and where does it travel.data_flow_transports_domain_entity
Type-specific fields on BaseNode
entity_identitystringIdentifier shape (e.g. "UUID", "email")
lifecyclestringLifecycle description
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
3 edge types connected to this entity.
aggregate_contains_domain_entityapi_endpoint_references_domain_entitydata_flow_transports_domain_entity