← Назад к вопросам

С какими библиотеками работал на предыдущем проекте

1.3 Junior🔥 211 комментариев
#Опыт и софт-скиллы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стек технологий на предыдущих проектах

На последнем крупном проекте (приложение для финтех-сектора с 500k+ пользователей) мы использовали модульную многомодульную архитектуру с акцентом на чистоту кода, тестируемость и производительность. Вот ключевые библиотеки из нашего стека:

Архитектура и асинхронность

  • Coroutines + Flow — для асинхронных операций и реактивного программирования. Полностью заменили RxJava в новых модулях.
    class UserRepository @Inject constructor(
        private val api: UserApi,
        private val dispatcher: CoroutineDispatcher = Dispatchers.IO
    ) {
        suspend fun fetchUser(userId: String): User {
            return withContext(dispatcher) {
                api.getUser(userId)
            }
        }
        
        fun observeUser(userId: String): Flow<User> = flow {
            emit(api.getUser(userId))
        }.flowOn(dispatcher)
    }
    
  • Koin — как основной DI-фреймворк (легковесный, Kotlin-first подход). Для более сложных модулей использовали кастомные скоупы.
  • Android Architecture ComponentsViewModel, LiveData (для биндинга с XML), DataStore (замена SharedPreferences).

Сеть и данные

  • Retrofit + OkHttp — с кастомными интерсепторами для логирования, добавления хедеров и обработки ошибок.
    class AuthInterceptor(private val tokenManager: TokenManager) : Interceptor {
        override fun intercept(chain: Interceptor.Chain): Response {
            val request = chain.request().newBuilder()
                .addHeader("Authorization", "Bearer ${tokenManager.getToken()}")
                .build()
            return chain.proceed(request)
        }
    }
    
  • Room — с миграциями, типами-конвертерами через Gson и Flow для наблюдения за изменениями в БД.
  • Gson — для сериализации (выбор был обусловлен историческими причинами, в новых проектах рассматриваем kotlinx.serialization).

UI и навигация

  • Jetpack Compose — активно внедряли в новые фичи. Использовали Accompanist (Pager, Permissions) и Coil для загрузки изображений.
  • ViewBinding/DataBinding — в legacy-модулях.
  • Navigation Component — для безопасной навигации с передачей аргументов через SafeArgs. В Compose использовали compose-destinations.

Тестирование

  • JUnit 5 + MockK — для юнит-тестов (предпочитаем MockK из-за лучшей поддержки Kotlin и coroutines).
    @Test
    fun `fetchUser should return user from api`() = runTest {
        // Given
        val mockUser = User(id = "1", name = "Test")
        every { mockApi.getUser("1") } returns mockUser
        
        // When
        val result = repository.fetchUser("1")
        
        // Then
        assertEquals(mockUser, result)
    }
    
  • Espresso и Compose Testing — для UI-тестов.
  • Robolectric — для тестов, зависящих от Android-контекста, но без эмулятора.

Прочее

  • Firebase (Crashlytics, Analytics, Remote Config) — для мониторинга и анализа.
  • LeakCanary — для отслеживания утечек памяти.
  • Dagger Hilt — экспериментировали в одном из подмодулей, но основной стэк остался на Koin.
  • Gradle Version Catalog (TOML) — для централизованного управления зависимостями и версиями.

Ключевые практики работы с библиотеками

  • Строгое соблюдение принципа единственной ответственности — каждая библиотека использовалась для четко определенной задачи.
  • Абстракция над зависимостями — например, все сетевые вызовы были инкапсулированы за интерфейсами репозиториев, что позволило бы при необходимости заменить Retrofit без переписывания бизнес-логики.
  • Активное ведение Proof of Concept (PoC) — перед внедрением новых библиотек (например, при переходе с RxJava на Coroutines) проводилось детальное тестирование на производительность, читаемость кода и совместимость с существующей кодовой базой.

Этот стек позволил достичь высокой стабильности приложения (крэш-рейт ниже 0.1%), быстрой разработки новых фич и удобной поддержки легаси-кода благодаря модульности и продуманной архитектуре.