Какие знаешь альтернативы использованию прямых зависимостей модуля app от других модулей

«Какие знаешь альтернативы использованию прямых зависимостей модуля app от других модулей» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Android-разработке есть несколько альтернатив прямым зависимостям между модулями:

  1. Интерфейсные модули - создание модуля с интерфейсами, который знают оба модуля, а реализация скрыта в implementation-модуле.
// :core-api
interface AuthService {
    fun login()
}

// :app
val authService: AuthService = // получаем через DI

// :auth-impl
class AuthServiceImpl : AuthService {
    override fun login() { ... }
}
  1. EventBus/RxBus - коммуникация через события.

  2. Dependency Injection (Dagger/Hilt) - внедрение зависимостей через DI-контейнер.

  3. Navigation Component - для навигации между feature-модулями.

  4. Dynamic Feature Modules - загрузка модулей по требованию.

  5. Content Providers - для межпроцессного взаимодействия.

  6. Local Broadcasts - для простой коммуникации.

  7. Shared Preferences/Database - обмен данными через хранилище.

Лучший подход зависит от конкретного сценария - чаще всего используют комбинацию интерфейсных модулей и DI.