В чем разница между сущностью и моделью в Symfony2/Doctrine

Я иду через FOSUserBundle.

И я хотел бы понять, в чем разница между Model/User.php и Entity/User.php.

Разве Модель и Сущность не могут быть одинаковыми?

Ответы

Ответ 1

Здесь лучшее резюме о ролях и терминологии Учения 2.

Entity используется шаблоном UnitOfWork в Doctrine 2.0 ORM (и в Hibernate в мире Java), а также является объектным представлением объекта в реальном мире. Он имеет те же атрибуты и методы, что и запись, но не знает о ее сохранности. Это в основном POPO (обычный старый объект PHP). Это позволяет этим классам и объектам быть очень легкими.

Модель - это концептуальное объектное представление вещи. Этот термин может быть использован для всего вышеперечисленного. Запись - это модель, такая же, как сущность или документ. Термин описывает объектное представление вещи.

Поэтому, если вы хотите создать пакет с некоторыми моделями в нем и хотите, чтобы ваш пакет не зависел от какого-либо уровня персистентности, вы должны создать классы моделей и интерфейсы, которые определяют эту вещь.

Вы бы определили и/или реализовали там все, что не является специфичным для какой-либо персистентной реализации, и вы бы использовали связанный объект или класс документа через делегирование для обработки конкретного материала.

Это делается, например, в FOSUserBundle, который определяет модель пользователя. Эта модель User используется во всем пакете, но не имеет полной реализации для доступа к своим собственным данным (я не смотрел, но думаю, что это мог быть только интерфейс). Окончательная реализация выполняется в классе сущностей, а другая - в классе документов, поэтому независимо от того, используете ли вы MySQL или MongoDB, вы все равно можете работать с той же моделью User. Вы даже можете переключаться с одного на другой, не изменяя свой код, поскольку он всегда использует модель, которая не зависит от сущности или документа.