[[Aggregate|Aggregates]] group related [[Entity|Entities]] and [[Value Object|Value Objects]] to ensure [[Transactional consistency]], protect Aggregate invariants, and enforce its business rules. Each Aggregate has a single [[Aggregate Root]], the Entity responsible for managing changes and maintaining data integrity. [[Domain Event|Domain Events]] capture significant occurrences within a domain. Non-Root Entities should focus on representing mutable domain concepts, maintaining consistent identity, protecting their invariants, and enforcing related business rules. To avoid violating the [[Separation of Concerns (SoC)]] principle and introducing [[Accidental Complexity]], Non-Root Entities should remain independent of domain events. Domain events should signal state changes only after domain logic is executed, and it is the aggregate root's responsibility to handle this. Allowing non-root entities to publish or listen to domain events undermines the aggregate root's control over communication and transactional consistency.