Предметный глагол точнее CRUD
publishWorkout и correctSet сообщают больше, чем update. Команда включает ожидаемую версию и право на действие; успешный переход создаёт историю. Удаление опубликованной тренировки может стать archive, если аудит важнее физического удаления.
Read-модель списка не обязана собираться тем же repository, что сохраняет агрегат. Отдельный query service способен вернуть плоский WorkoutListItem без загрузки полного графа объектов.
Границы хранения
Repository не является SQL-конструктором
Методы getOwnedWorkout, save и nextVersion отражают нужды сценария. Универсальный findBy(array $criteria, array $order) протекает деталями хранения наружу и редко выражает намерение.
Mapper восстанавливает объект из строки, но не должен обходить инварианты без документированной причины. Отдельная persisted state factory может быть нужна, если конструктор выражает только создание нового объекта.
Doctrine в 2026
По официальному статусу на август 2026 стабильная линия Doctrine ORM — 3.6, а 4.0 обозначена как upcoming. Атрибуты mapping, EntityManager и Unit of Work снимают много механического кода, но не отменяют SQL, индексы, границы транзакции и стоимость ленивых связей.
N+1 возникает, когда шаблон или сериализатор незаметно инициирует запрос для каждой сущности. Профилируйте фактические запросы и создавайте проекции для списков. flush — эффект; его место определяет прикладной сценарий, а не случайный setter.
Миграция совместима с двумя версиями
Добавление начинается с новой nullable-колонки или таблицы, затем выполняется контролируемый backfill, переключается чтение и только после этого усиливается NOT NULL. Удаление старого поля переносится в следующий релиз.
Schema diff ORM полезен как черновик, но миграция проходит ручной обзор: блокировка таблицы, значение по умолчанию и время на данных production важнее красоты mapping.
Лабораторная работа
Реализуйте publishWorkout через узкий repository и отдельный список недельных тренировок. Затем опишите, какие части изменятся при переходе с ручного PDO на Doctrine 3.6.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- doctrine-project.orghttps://www.doctrine-project.org/projects/ormПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- dev.mysql.comhttps://dev.mysql.com/doc/refman/8.4/en/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .