← Назад к вопросам
С какими библиотеками работал на предыдущем проекте
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 Components — ViewModel, 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%), быстрой разработки новых фич и удобной поддержки легаси-кода благодаря модульности и продуманной архитектуре.