- Читаемость: Имена переменных/методов отражают их назначение (
calculateTotalPrice() вместо calc()).
- SOLID принципы: Классы имеют одну ответственность, зависимости инжектятся.
- Иммутабельность: Использование
val и data class с copy() вместо мутабельных состояний.
- Обработка ошибок: Явная обработка исключений (
try/catch) или Result<T> вместо игнорирования.
- Тестируемость: Код модульный, с мокабельными зависимостями.
// Хороший пример
data class User(val id: String, val name: String)
class UserRepository(
private val apiService: ApiService // Инжект зависимости
) {
suspend fun getUser(id: String): Result<User> {
return try {
Result.success(apiService.fetchUser(id))
} catch (e: Exception) {
Result.failure(e)
}
}
}