Kchaiu
7 subscribers
1 photo
3 videos
1 file
4 links
Download Telegram
Channel created
Привет
1
У меня есть новый канал @AutDreams67
Я здесь
🖕3
🫴🏿
Здорово всем я вернулся спасибо за
Каким образом происходит преобразование(mapping) данных(моделек/DTO)?
Взять любую модельку, и преобразовать с слоя data на domain модель
ответ
Mapping — это шаг, где берём модель из data слоя (обычно DTO после запроса) и превращаем её в domain модель. Это нужно, чтобы работать с «чистыми» данными в бизнес-логике приложения. Domain модель не зависит от того, как данные хранятся или приходят из сети/базы.
код
// ---------------- Data слой ----------------

// DTO — модель данных из API
data class UserDto(
val id: Long?, // ID может быть null из API
val username: String?, // имя пользователя может быть null
val email: String?, // email может быть null
val createdAt: String? // дата создания как строка
)

// ---------------- Domain слой ----------------

// Domain модель — удобна для бизнес-логики
data class User(
val id: Long,
val name: String,
val email: String,
val createdAt: Long
)

// Mapper: преобразует DTO в domain модель
class UserMapper {
fun map(dto: UserDto): User {
return User(
id = dto.id ?: 0, // если id null — ставим 0
name = dto.username ?: "Unknown", // если имя null — "Unknown"
email = dto.email ?: "", // если email null — пустая строка
createdAt = dto.createdAt?.toLongOrNull() ?: 0 // преобразуем дату в Long
)
}
}

// Repository: получает данные и возвращает domain модель
class UserRepository(
private val api: UserApi,
private val mapper: UserMapper
) {
suspend fun getUser(): User {
val dto = api.getUser() // получаем DTO из API
return mapper.map(dto) // преобразуем в domain модель
}
}

// API интерфейс
interface UserApi {
suspend fun getUser(): UserDto
}
Каким образом указывается Dispatcher для работы корутины?
Написать полную обработку запроса с указанием Dispatcher
ответ
В Kotlin Coroutines Dispatcher определяет, на каком потоке выполняется код. Для работы с UI используют Dispatchers.Main, для сетевых или файловых операций — Dispatchers.IO, а для тяжёлых вычислений — Dispatchers.Default. При запросе данных корутина запускается на главном потоке, а сам сетевой или базовый запрос выполняется на IO-потоке через withContext(Dispatchers.IO). После получения данных они преобразуются в domain модель и возвращаются на главный поток для обновления интерфейса пользователя. Такой подход позволяет не блокировать UI и безопасно работать с данными.