Толстый JS-клиент можно сам по себе рассматривать как MV*-приложение. Серверная часть в этом случае становится моделью.
Разве, продукт не будет aggregate root для картинок (его картинок) и прочих вещей, которые относятся непосредственно к нему.
Например была мне нужна такая штука, как полиморфические связи
например в виде можно сделать что-то типа такого: $product->save()
$entity = $em->find(User::class, 1);
// где-то в шаблоне
$entity->doSomethingNasty();
// еще где-то
$em->flush();
Сегодня я весь день крутил доктрину, и скажу, что зря я не делал этого раньше. Тоесть пришло много понимания и включился свет, освещающий темные стороны.