Ответ
В Clean Architecture маппинг данных обычно выполняется в слое Data (репозитории) или Domain (use case), в зависимости от сложности преобразований.
Рекомендуемый подход:
- Простые преобразования (DTO → Entity) - в репозитории
- Сложная бизнес-логика - в use case
// В репозитории
class UserRepositoryImpl {
fun getUser(): User {
val userDto = api.getUser() // DTO из сети
return userDto.toDomain() // маппинг в Domain-модель
}
}
// Расширение для маппинга
fun UserDto.toDomain() = User(
id = this.id,
name = "${this.firstName} ${this.lastName}"
)
Почему так:
- Data слой знает о DTO и инфраструктуре
- Domain слой остается чистым от деталей реализации
- Use case может комбинировать данные из разных источников