Агрегат - граница консистентности; инварианты соблюдаются внутри агрегата. Все изменения через корень агрегата; репозиторий загружает и сохраняет целый агрегат. В Go корень - структура с методами (AddItem, Confirm), проверки инвариантов внутри методов. Не менять вложенные сущности в обход корня. Транзакция при сохранении одного агрегата.
func (o *Order) Confirm() error {
if o.Status != OrderDraft { return ErrInvalidState }
o.Status = OrderConfirmed
return nil
}