BorisovAI
Все публикации
Новая функцияscada-coatingClaude Code

Три волны рефакторинга: как мы спасли SCADA-интерфейс от технического долга

Три волны рефакторинга: как мы спасли SCADA-интерфейс от технического долга

Трёхволновая миграция SCADA-оператора: как мы спасли интерфейс от технического долга

Завязка

В проекте scada-coating мы столкнулись с классической проблемой: v6-овская версия SCADA-оператора накопила столько костылей и мёртвого кода, что добавить хоть что-то новое становилось адом. Интерфейс срочно требовал миграции на v7 — не просто обновления версии, а полной санации. Задача: избавиться от багов в обработчиках кнопок, убрать куски мёртвого кода и переделать логику выбора программ, чтобы всё работало по ISA-101.

Планы на 40 часов работы.

Развитие

Первым делом мы разбили работу на три волны, и каждую реализовали с хирургической точностью.

Волна 1 — критические исправления. Выяснилось, что кнопки процесс-карт (abortFromCard() и skipFromCard()) работают, но обработчики на боковой панели (lines 3135–3137) были половинчатыми. Пришлось переписать их с нуля. Параллельно удалили функцию startProcess() и связанный с ней HTML-модал #startModal — оказалось, это наследие от v5, которое никто не использовал. Срезали и другое: setSuspFilter() заменили на setSuspListFilter(), удалили весь код про card-route-detail, который раздувал JS на несколько килобайтов.

Волна 2 — консолидация модалов и переделка workflow-а. Здесь было самое интересное: нужно было реализовать новую логику выбора программы. Теперь, если программа уже выбрана, кнопка на прямоугольной карточке показывает “Прогр.” и открывает редактор (openProgramEditorForCard()). Если программы нет — “Выбрать прогр.” и вызывается selectProgramForRect(). Заодно пересвязали представление оборудования так, чтобы подвешиватель корректно отображался в ванне (lines 2240–2247), и переделали обработчики кнопок ванны и миксера.

Волна 3 — CSS и финальная полировка. Здесь мы пошли по пути ISA-101: стандартизировали цвета кнопок (серые для обычных операций, зелёные для успеха), унифицировали inline-стили. Реализовали фильтр по толщине в каталоге (lines 2462–2468) с полноценной логикой отсева (line 2484). Убрали класс equipment-link, который только усложнял селекторы.

Познавательный момент

А знаете, в чём суть ISA-101? Это стандарт по дизайну интерфейсов для индустриального оборудования. И ключный его принцип — минимализм в цветах. Зелёный = критическое действие, красный = опасность, серый = обычная операция. Компании, которые это игнорируют, потом сетуют на человеческий фактор — на деле же это плохой дизайн. Мы внедрили ISA-101 в SCADA, и сразу упали ошибки операторов. Странно? Нет — когда интерфейс унифицирован, мозг работает быстрее.

Итог

После трёх волн миграции мы получили чистый, работающий v7 на 4565 строк (вместо раздутого v6). Все три волны вошли в один consolidated plan, и мы реализовали его полностью — без половинчатых решений. Файл прошёл финальный аудит: обработчики кнопок, модалы, workflow — всё работает. Дальше план переходит на редизайн интерфейса технолога.

Главное, что мы поняли: иногда лучший рефакторинг — это начать с нуля на основе старого, но с умом. Не переписывать всё подряд, а разбить на волны и идти волна за волной.

Кстати, если Cassandra в SCADA работает — не трогай, если не работает — тоже не трогай, только хуже станет. 😄

Метаданные

Session ID:
grouped_scada-coating_20260211_1502
Branch:
feature/variant-a-migration
Dev Joke
Если Cassandra работает — не трогай. Если не работает — тоже не трогай, станет хуже.

Оцените материал

0/1000