Совокупный корень - это сложное имя для простой идеи.
Общая идея
Хорошо разработанная диаграмма классов инкапсулирует ее внутренности. Точка, через которую вы получаете доступ к этой структуре, называется aggregate root
.

Внутренности вашего решения могут быть очень сложными, но пользователь этой иерархии просто будет использовать root.doSomethingWhichHasBusinessMeaning()
.
Пример
Проверьте эту простую иерархию классов

Как вы хотите ездить на своей машине? Выбрал лучше API
Вариант А (просто как-то работает):
car.ride();
Вариант B (у пользователя есть доступ к инерналам класса):
if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
for (Wheel w: car:getWheels()){
w.spin();
}
}
Если вы считаете, что вариант А лучше, тогда поздравляю. Вы получаете основную причину aggregate root
.
Совокупный корень инкапсулирует несколько классов. вы можете управлять всей иерархией только через главный объект.