Рефакторинг кодовой базы мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Рефакторинг кодовой базы мобильного приложения
Средний
от 1 недели до 3 месяцев
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Рефакторинг кодовой базы мобильного приложения

Рефакторинг заказывают не когда «хочется лучше» — а когда новая фича занимает три недели вместо трёх дней, потому что надо переписать четыре экрана, которые тащат за собой один God Object с 2000 строк. Или когда Instruments показывает 30-секундный main thread stall при открытии чата — и никто в команде не берётся его трогать.

Как выглядит кодовая база, которая требует рефакторинга

iOS: ViewController на 1500 строк с URLSession, CoreData, бизнес-логикой и расчётом высоты ячейки в одном файле. NotificationCenter с magic-string именами нотификаций по всему проекту. Closure-hell в completion handler'ах, отсутствие [weak self] = утечки памяти, которые Instruments показывает как стабильный рост Allocations.

Android: Activity с 800 строк, прямые вызовы SharedPreferences в UI-слое, AsyncTask вместо корутин (устарел с API 30), жёсткая зависимость между фичами через статические синглтоны. LiveData и ViewModel подключены, но логика всё равно живёт в Activity/Fragment.

React Native / Flutter: компоненты с бизнес-логикой прямо в JSX/build, состояние через setState на 200+ строчных компонентах без разделения на слои, отсутствие типизации (any везде в TypeScript, dynamic в Dart).

Что делаем и в каком порядке

Рефакторинг без тестов — это переписывание с надеждой, что ничего не сломали. Первый шаг всегда — покрытие критических путей snapshot- и unit-тестами до изменений. Это фиксирует текущее поведение как эталон.

iOS. Выносим сетевой слой в отдельный NetworkService с async/await (Swift Concurrency). ViewController получает только ViewModel через Dependency Injection (без Swinject для простых случаев — достаточно init-инъекции). CoreData operations — в PersistenceController с NSPersistentContainer.performBackgroundTask. Combine или async/await заменяет closure callbacks — читаемость кода меняется кардинально.

Android. Миграция с AsyncTask / RxJava на Kotlin Coroutines + Flow. ViewModel + StateFlow вместо изменяемых LiveData. Repository pattern — UI ничего не знает о том, откуда данные: Room, Retrofit, или кеш. Hilt для DI — устраняет статические синглтоны, которые делают тесты невозможными.

Кейс: Android-приложение для трекинга тренировок, 2 года в production, команда 3 разработчика. Главная проблема: WorkoutActivity.java — 1800 строк, Bluetooth-соединение с датчиком, запись в SQLite, расчёт статистики и UI в одном классе. Новая фича (поддержка второго типа датчика) оценивалась в 6 недель. После рефакторинга: BluetoothSensorManager, WorkoutRepository, StatisticsCalculator, WorkoutViewModel — каждый класс до 200 строк с чёткой ответственностью. Следующая аналогичная фича — 5 дней.

Работа с техническим долгом постепенно

Полный рефакторинг «всё сразу» — почти всегда плохая идея. Работаем по Boy Scout Rule: каждый PR улучшает код, которого касается. Для масштабного рефакторинга — feature branch с поэкранной декомпозицией, параллельный запуск старого и нового кода через feature flag, постепенный перевод трафика.

Метрики результата

Не «стало лучше», а конкретные числа:

  • Build time (модульность ускоряет инкрементальную сборку)
  • Среднее время добавления новой фичи (velocity из Jira/Linear)
  • Количество крешей (Firebase Crashlytics, до и после)
  • Test coverage (Istanbul/JaCoCo)

Сроки: рефакторинг одного модуля / экрана — 1–2 недели. Полная архитектурная реструктуризация приложения — 6–14 недель в зависимости от объёма кода и наличия тестов.