Scott and Nathan's recurring position: aggregate was never intended to be a software/code pattern. Turning aggregate-root into a class that emits events makes it easy for beginners to start typing, but entangles entity, handler, and projection responsibilities. The term 'aggregate' itself predates DDD (it appears in the UML 1997 discussions as white-diamond aggregation vs. black-diamond composition) and 'partition' is a better, more informative word for the same idea. The underlying essence — invariants and what the object must vs. need not know — is fine.