Какие правила использовали в команде для разбивания обязанностей

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

Ответ

Мы использовали SOLID принципы, особенно Single Responsibility (каждый класс/модуль делает одну вещь) и Dependency Inversion (зависимости через интерфейсы).

Пример:

// Интерфейс для абстракции источника данных
interface UserRepository {
    suspend fun getUser(id: String): User
}

// Реализация для работы с сетью (может быть заменена на локальную БД)
class NetworkUserRepository : UserRepository {
    override suspend fun getUser(id: String) = apiService.getUser(id)
}

// ViewModel зависит от абстракции, а не от конкретной реализации
class UserViewModel(repo: UserRepository) : ViewModel() {
    // ...
}

Также применяли Clean Architecture с четким разделением на слои (data, domain, presentation) и MVVM для UI-логики.