BorisovAI
Все публикации
Исправлениеtrend-analisisClaude Code

Когда унификация интерфейса оказывается архитектурной головоломкой

Когда унификация интерфейса оказывается архитектурной головоломкой

Унификация — это неочевидно сложно

Задача стояла простая на словах: «Давай выровняем интерфейс страниц тренда и анализа, чтобы не было разнобоя». Типичное дело конца спринта, когда дизайн требует консистентности, а код уже рассеялся по разным файлам с немного разными подходами.

В проекте trend-analisis у нас две главные страницы: одна показывает тренды с оценками, другая — детальные аналитические отчёты. Обе они должны выглядеть как части одного целого, но на деле они разошлись. Я открыл trend.$trendId.tsx и analyze.$jobId.report.tsx и понял, что это как смотреть на двух братьев, которые выросли в разных городах.

Первым делом я разобрался с геометрией. На мобильных устройствах кнопки на странице тренда вели себя странно — они прятались за правый край экрана, как непослушные дети. Перевёл их в стек на мобильных и горизонтальный ряд на десктопе. Простая история, но именно такие детали создают ощущение недоделанности.

Потом пошло интереснее. ScorePanel — компонент с оценкой и её визуализацией — тоже требовал внимания. На странице тренда Sparkline (такие симпатичные маленькие графики) были отдельно от оценки, на странице анализа они находились где-то рядом. Решил переместить Sparkline внутрь ScorePanel, чтобы блок оценки стал полноценным, законченным элементом.

Но главный подвох ждал в бэкенде. Когда я нырнул в routes.py, обнаружил, что оценка анализа считается в диапазоне 0–1 и потом нормализуется. Странная архитектура: пользователь видит на экране число 7–8, а в коде живёт 0.7–0.8. Когда возникла необходимость унифицировать, пришлось переделать — теперь всё работает в единой шкале 0–10 от фронтенда до бэкенда.

Ещё одна муха в супе: переводы. Каждый отчёт имеет title и description. Вот только они часто приходили на разных языках — title на английском, description на русском, потому что система переводов разрасталась бессистемно. Пришлось переделать архитектуру на get_cached_translations_batch(), чтобы title и description синхронизировались по локали.

Вот тут и проявляется одна из типичных ловушек разработки: когда система растёт, легко получить состояние, при котором разные части кода решают одну и ту же задачу по-разному. Кэширование переводов, кэширование данных, нормализация чисел — каждая из этих проблем порождает своё микрорешение, и вскоре у вас сложная паутина зависимостей. Решение: честный код-ревью и документирование паттернов, чтобы новичок не добавил пятый способ кэширования.

В итоге: две страницы теперь выглядят как надо, API вернулся к нормальным оценкам (7–8 вместо 1), переводы синхронизированы. Git commit отправлен, бэкенд запущен на порту 8000. Дальше в плане новые исправления — благо материал есть.

Чему научился: унификация — не просто про UI, это про согласованность логики по всему стеку. Порой проще переделать целый компонент, чем мучиться с костылями.

😄 Почему backend разработчик плюёт на фронтенд? Потому что он работает в консоли и ему всё равно, как это выглядит.

Метаданные

Session ID:
grouped_trend-analisis_20260210_1712
Branch:
main
Dev Joke
Почему Ansible считает себя лучше всех? Потому что Stack Overflow так сказал

Часть потока:

Разработка: trend-analisis

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

0/1000