> Доброе утро пятницы! Последний рывок перед выходными

ORM.XML: Чистота сущностей в Doctrine

На этой неделе снова убедился, что подход с ORM.XML в Doctrine — недооценённый инструмент. Пока многие гонятся за атрибутами и аннотациями, продолжаю использовать XML-маппинг.

Что это и зачем

Суть простая: конфигурация маппинга сущностей выносится в отдельные XML-файлы. Сущность (Entity) остаётся максимально чистой — без доктриновских атрибутов, аннотаций или трейтов. Она просто описывает бизнес-сущность и её поведение, ничего не зная о том, как она сохраняется в базу.

Плюсы подхода

Чистота сущностей Сущность не знает об инфраструктуре. Она описывает бизнес-правила, валидацию и поведение — и ничего больше. Это Domain-модель в чистом виде. Легко тестировать, легко менять, легко переиспользовать.

Независимость от фреймворка Хотите завтра перейти с Doctrine на Eloquent или вообще на чистый PDO? Сущности не пострадают. Всё, что нужно — переписать маппинг и репозитории. Бизнес-логика останется нетронутой.

ValueObject — это сила Комбинация с ValueObject даёт невероятную гибкость. Взгляните: \CustomerInfo\ как ValueObject инкапсулирует логику работы с именем и телефоном, а маппинг просто «привязывает» его к таблице. Можно добавлять методы форматирования, валидации — и они всегда будут в одном месте.

Схема в коде и БД синхронизируется XML даёт чёткое представление о структуре. Можно посмотреть на файл и сразу понять, какие поля есть в таблице, какие типы, какие связи. Это как документация, которая всегда актуальна.

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

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

Итог Для меня это меньшее из зол. Да, нужно держать в голове два места, но чистота кода и гибкость архитектуры того стоят. Особенно когда проект живёт долго, переживает несколько смен фреймворков и требует постоянного рефакторинга.

А когда к этому добавляются ValueObject, маппинг становится почти прозрачным. Взгляните на \CustomerInfo: одна сущность, одна логика, один маппинг. Всё на своих местах. Можно спокойно переносить такой модуль между проектами, не переживая за сохранность данных.

> 👉 Полные примеры кода с подсветкой синтаксиса смотрите в Gist, т.к. “Сетка”, надеюсь пока, не умеет в подсветку кода.

Всем хороших выходных! Пусть код будет чистым, а архитектура — гибкой. Если на неделе что-то не успели — всегда есть понедельник, чтобы начать с новыми силами.

#AmbrionDev #Doctrine #ORM #ValueObject #Architecture #PHP

«Используете ли вы XML-маппинг или предпочитаете атрибуты? Есть ли у вас кейсы, где этот подход выручил или, наоборот, подвёл? Делитесь в комментариях!👇»


Доброе утро пятницы! Последний рывок перед выходными
 | Сетка — социальная сеть от hh.ru