Ответ
Разбиваю задачу на подзадачи по слоям приложения:
- UI – экраны, компоненты, анимации
- Навигация – переходы между экранами
- Бизнес-логика – UseCase/Interactor
- Данные – API, локальное хранилище, маппинги
- Инфраструктура – DI, аналитика, кэширование
Пример декомпозиции для "лайка поста":
// UI
class PostAdapter { fun bind(likeState: Boolean) }
// Навигация
interface PostRouter { fun showLoginIfNeeded() }
// Бизнес-логика
class LikePostUseCase(repo: PostRepository) {
suspend operator fun invoke(postId: String)
}
// Данные
interface PostRepository {
suspend fun likePost(postId: String): Boolean
}
Каждый слой тестируется изолированно. Сначала реализую core-логику, затем UI.