Same language between product owners and developers.
helps efficient communications
2. Bounded Context
Define clear boundaries between parts of the system
Helps will Microservice architecture
3. Core Domain
The actual business problem of the application
Not any 3rd party utils / lib code
Entities vs Value Objects
Entities have ID and Reference equality
Entities are mutable
Entities can exist with value objects
Entities can be persisted which ValueObjects are a logical grouping of the some data in that entity.
Entities cannot be passed between aggregates ~
Value objects have reference and structural equality
Value objects dont have an ID field and can be treated interchangeably
Values objects are immutable
Value objects require an entity to be relevant and shouldnt exist outside the entity and do not require separate db tables for persistance, they hold / group logical info together like Money (1c, 2c, 5Dollar etc.)
Value objects can be passed between aggregates as they are immutable.
Aggregates
A conceptual whole
Is a logical grouping of Entities
An Aggregate has Invariants (a.k.a Validations) that ensures the aggregate is in a consistent state all the time.
Every aggregate has a RootEntity. Other aggregates can only talk to the RootEntity and not sub entities.