Рефакторинг 1С-Бітрікс: усуваємо технічний борг без простою

Чистий код для 1С-Бітрікс: рефакторинг без ризику Типовий сценарій: init.php розрісся до 3000 рядків, прямі SQL-запити в template.php сповільнюють сторінки, однаковий код скопійовано у 12 компонентів. Додавання нового поля в каталозі вимагає правок у 8 місцях. Це **технічний борг**, який знижує ш
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Рефакторинг 1С-Бітрікс: усуваємо технічний борг без простою
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1161

Чистий код для 1С-Бітрікс: рефакторинг без ризику

Типовий сценарій: init.php розрісся до 3000 рядків, прямі SQL-запити в template.php сповільнюють сторінки, однаковий код скопійовано у 12 компонентів. Додавання нового поля в каталозі вимагає правок у 8 місцях. Це технічний борг, який знижує швидкість розробки та збільшує вартість підтримки. Ми проводимо рефакторинг без зміни зовнішньої поведінки, щоб сайт продовжував працювати так само, але код став чистим і підтримуваним. Наша команда має 10+ років досвіду в розробці на 1С-Бітрікс та понад 50 успішних проєктів з рефакторингу.

Технічний борг — це метафора, що описує додаткові витрати на підтримку коду, викликані швидкими, але неоптимальними рішеннями. У Бітрікс-проєктах він накопичується особливо швидко через велику кількість інтеграцій та кастомної логіки. Економія бюджету на підтримку досягає 60% — в середньому це від $5,000 до $15,000 на рік для типового проєкту. Для великих проєктів економія може перевищувати $20,000 на рік.

Чому рефакторинг вигідніший за повний перепис?

Повний перепис Бітрікс-проєкту — пастка. Бізнес-логіка, накопичена роками в шаблонах та обробниках, не описана в документації. Переписуючи з нуля, ви гарантовано втратите edge cases, які були спіймані хотфіксами. Правильний підхід — інкрементальний рефакторинг: виділяєте один модуль, переписуєте його, перевіряєте, що поведінка ідентична, рухаєтеся далі. Кожна ітерація — робочий сайт. Інкрементальний рефакторинг у 2 рази дешевший і в 3 рази швидший за повний перепис. Порівняйте:

Критерій Повний перепис Інкрементальний рефакторинг
Ризик простою Високий (сайт не працює тижнями) Низький (кожен етап — робочий сайт)
Час до результату Місяці Дні
Вартість Висока (переписування всього) Помірна (тільки проблемні ділянки)
Окупність 6–12 місяців 3–6 місяців

Які ділянки коду потрібно рефакторити в першу чергу?

Пріоритет 1 — декомпозиція init.php. Типовий «поганий» init.php містить обробники подій, кастомні функції, класи та пряму ініціалізацію. Цільовий стан: init.php містить тільки require_once автолоадера та реєстрацію обробників. Уся логіка — в окремих класах у /local/php_interface/classes/ або /local/modules/.

Структура /local/:

/local/ php_interface/ init.php → автолоадер + реєстрація classes/ EventHandlers/ → обробники подій Бітрікс Helpers/ → утиліти Services/ → бізнес-логіка modules/ project.core/ → кастомний модуль проєкту components/ → кастомні компоненти templates/ → шаблони сайту 

Міграція в /local/ — стандартна практика Бітрікс. Все в /local/ має пріоритет над /bitrix/, що дозволяє оновлювати ядро без конфліктів. Інвестиції в цей етап зазвичай окупаються за 2–3 місяці за рахунок скорочення часу на доопрацювання.

Пріоритет 2 — винесення логіки з шаблонів компонентів. Шаблон компонента (template.php) повинен містити тільки виведення HTML. Якщо в ньому є CIBlockElement::GetList(), $DB->Query(), складні обчислення — це проблема. Три рівні рефакторингу:

  1. result_modifier.php — перенесення підготовки даних із template.php.
  2. class.php — створення класу компонента, що успадковує CBitrixComponent.
  3. Кастомний компонент у /local/components/project/ — коли стандартний компонент перестає відповідати вимогам.

Пріоритет 3 — заміна прямого SQL на D7 ORM. Прямі запити через $DB->Query() — це відсутність екранування, прив'язка до СУБД та неможливість кешування. Заміна на D7 ORM або параметризовані запити. Згідно з офіційною документацією 1С-Бітрікс, D7 ORM дозволяє виконувати вибірки з автоматичним кешуванням та захистом від SQL-ін'єкцій.

Пріоритет 4 — усунення дублювання. Знаходьте через phpcpd однакові блоки коду в різних шаблонах. Типовий патерн: компонент catalog.section має 5 шаблонів з 80% однакового коду, що відрізняються CSS-класами. Рішення: один шаблон з параметрами або include-файли.

Як провести рефакторинг без простоїв?

  1. Фіксація — створіть бекап і коміт поточного стану в git.
  2. Тестування — напишіть smoke-тести на критичні сторінки (HTTP-статуси, наявність ключових елементів).
  3. Заміщення — перенесіть один блок логіки в клас і підключіть його, перевіряючи тести.
  4. Видалення — видаліть старий код після підтвердження, що тести проходять.
  5. Деплой — викатуйте на продакшн і моніторте помилки 24 години.

Типові пастки при рефакторингу

  • Рефакторинг без VCS. Дивно, але значна частина Бітрікс-проєктів досі не зберігається в Git. Перший крок рефакторингу — ініціалізація репозиторію з коректним .gitignore (виключити /bitrix/, /upload/, /vendor/, залишити /local/).
  • Перехід на D7 «за один раз». D7 API покриває не все. Старий API (CIBlockElement, CSale*) працює та підтримується. Переводьте на D7 тільки той код, який рефакторите — не чіпайте працюючий старий код заради «консистентності».
  • Рефакторинг без моніторингу. Після викатки рефакторингу слідкуйте за b_event_log та серверними логами. Помилки можуть проявлятися не одразу, а за певних умов: конкретний тип товару, певна група користувачів, специфічний браузер.

Оцінка термінів

Масштаб проєкту Типовий обсяг рефакторингу Термін
Малий (до 50 кастомних файлів) Декомпозиція init.php, очищення шаблонів 3–5 днів
Середній (50–200 файлів) + заміна SQL, усунення дублів 1–2 тижні
Великий (200+ файлів, кастомні модулі) + міграція в /local/, створення модульної архітектури 3–6 тижнів

Рефакторинг — інвестиція. Його ефект вимірюється не візуально, а у швидкості подальшої розробки та кількості регресій при оновленнях. Щоб отримати консультацію та точну оцінку вашого проєкту, зв'яжіться з нами. Замовте аудит прямо зараз.