Legacy, deprecated API и стратегия миграции
Разработка в Битриксе требует сосуществования нового ядра D7 и исторического API, поскольку часть операций (создание инфоблоков, свойств и прав) пока не имеет D7-аналогов. Для сохранения стабильности системы старые методы изолируют внутри сервисных слоев, а статус устаревания функций отслеживают по исходникам ядра и аннотациям @deprecated.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Что считается deprecated и где это отслеживать
-
2
Классическое API рядом с D7 в одном проекте
-
3
Постепенная миграция без переписывания
-
4
Когда переписывать выгоднее
Материалы
Официальная документация
-
Как писать код, совместимый с PostgreSQL Новая дока
Материалы BXMax
Проверь себя
Заказчик просит «переписать всё на D7» за квартал. Что ответить?
Что D7-замены нет у части классического API: инфоблоки, свойства и права создаются через CIBlock и CIBlockProperty по документации. Переписывать надо не по префиксу C, а по списку устаревшего и по цене поддержки конкретного участка.
Код перевели с классического изменения заказа на OrderTable::update(). Что сломалось?
Жизненный цикл: события, история, пересчёт коллекций не сработали. Формально это D7, по факту — хуже старого кода. Замена — объектная модель: Order::load(), изменение и save().
Как понять, что метод устарел, если он работает?
По @deprecated в исходниках ядра, по сводным таблицам замен в документации модулей и по разборам обновлений. Работающий метод — не признак: удаляют ровно те, что помечены.
Когда обёртка вокруг старого кода уже не спасает и надо переписывать?
Прямой SQL к таблицам ядра, который не переживёт PostgreSQL и смену схемы; наследники классов, ставших final; скопированные компоненты с шаблонами пятилетней давности. Работающий CIBlockElement::GetList в кеше — нет.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить