Чистый код в компонентах Битрикса: class.php
Автор:
Кирилл Новожилов
Бесплатный курс о том, как навести порядок в компонентах 1С-Битрикс. У каждого проекта есть компонент, в который боятся заходить: внутри component.php на четыреста строк, запросы к базе вперемешку с выводом, кэш, который иногда отдаёт чужие данные, и result_modifier.php, где живёт половина бизнес-логики.
За шесть уроков вы переведёте такой компонент в читаемый class.php: с контрактом параметров, безопасным кэшем, декомпозицией на понятные методы и общим базовым классом в собственном модуле проекта.
Весь курс построен на одном примере — списке новостей. В первом уроке это типичный legacy 2015 года: 32 запроса к базе на десять новостей и ссылка «Редактировать», которую кэш показывает анонимам. В шестом — компонент с типизацией и D7 ORM, у которого число запросов не растёт вместе со списком. Каждый урок — отдельный шаг, его можно посмотреть отдельной папкой в репозитории примеров.
Что вы получите:
- каркас
class.php, который можно копировать в новые задачи; - понимание жизненного цикла компонента и того, где именно ломается кэш;
- умение находить и чинить N+1 в типовых списках;
- собственный модуль
project.coreс базовым классом и трейтами; - чек-лист для code review чужих компонентов.
Уроки идут на локальном окружении Omut, все команды и адреса в тексте рабочие, переводить их под себя не нужно. Код примеров прогнан на ядре main 26.800. Курс бесплатный, код лежит на GitHub.
Нужно заранее: PHP 8.2 и базовое ООП, опыт хотя бы одного компонента в процедурном стиле, понимание инфоблоков и шаблонов компонентов.
От legacy-компонента к чистому class.php
Шесть уроков на одном компоненте. Вы развернёте стенд с настоящим legacy-кодом, разберёте, чем он опасен, и перенесёте его в class.php: сначала «в лоб», потом по жизненному циклу компонента. Затем возьмётесь за два места, где компоненты ломаются чаще всего: входящие параметры и кэш. $arParams станет строгим контрактом, а кэш перестанет отдавать одному пользователю данные другого.
Во второй половине курса executeComponent() распадётся на изолированные методы, выборка перейдёт на D7 ORM, а N+1 исчезнет: число запросов перестанет расти вместе со списком. Общее уедет в собственный модуль проекта: базовый класс, трейты для опциональных способностей, установка через админку. Финальный урок — тот же маршрут рефакторинга на компоненте из вашего проекта.
Аудит legacy-компонента и подготовка стенда
Переносим компонент в class.php
Контракт параметров и безопасный кэш
Декомпозиция и D7 ORM: убираем N+1
Общий код в модуль: базовый класс и трейты
Настройки в админке и маршрут рефакторинга
Ваш прогресс
Войдите в аккаунт, чтобы отслеживать свой прогресс по курсу
Войти для отслеживания прогрессаAI Домовой История
на связи
Привет! Я AI Домовой
Помогу с вопросами по 1С-Битрикс: D7, ORM, компоненты, события.
Чем подробнее задача — тем точнее ответ. Иногда готовлю развёрнутое решение.
Дневной лимит исчерпан. Сброс завтра.
Увеличить лимит с поддержкой