An Aggregate is a cluster of domain objects that can be treated as a single unit. The Aggregate Root is the gatekeeper.
The Aggregate Root is the only member of the aggregate that outside objects are allowed to hold a reference to. If you have an Order (Root) and OrderItems (Children), you can't talk to an OrderItem directly. You must go through the Order. This ensures the Order can enforce rules like 'Total price cannot exceed credit limit'.
One transaction should only update **ONE** aggregate. This is a difficult but vital rule for scaling. If you need to update two things, use **Domain Events** and 'Eventual Consistency'. This keeps your aggregates small, fast, and independent.
Q: "How big should an aggregate be?"
Architect Answer: "As small as possible, but no smaller. Over-sized aggregates lead to database deadlocks and slow performance. If two things DON'T have a strict rule that they must be changed together in the same millisecond, they should probably be separate aggregates. Smaller is always better for concurrency."