đ§ Mapper Class – āĻŦ্āϰেāĻāύ-āĻĢ্āϰেāύ্āĻĄāϞি āĻŦ্āϝাāĻ্āϝা (Kotlin)
đ§ Mapper Class – āĻŦ্āϰেāĻāύ-āĻĢ্āϰেāύ্āĻĄāϞি āĻŦ্āϝাāĻ্āϝা (Kotlin)
āϤুāĻŽি āϝāĻĻি āĻāĻāύāĻ āĻāĻŽāύ āϏিāĻুāϝ়েāĻļāύ āĻĻেāĻো āϝেāĻাāύে āĻāĻāĻা āĻĄাāĻা āĻ্āϞাāϏেāϰ āĻĄাāĻা āĻ āύ্āϝ āĻāĻāĻা āĻĄাāĻা āĻ্āϞাāϏে āĻ্āϰাāύ্āϏāĻĢাāϰ āĻāϰāϤে āĻšāϝ়, āϤāĻāύ Mapper āĻ্āϞাāϏ āĻাāĻে āϞাāĻে। đ¤
đ¯ Mapper Class āĻী?
Mapper āĻšāϞ āĻāĻāĻা āĻāύāĻাāϰ্āĻাāϰ, āϝা āĻāĻāĻা āĻĄাāĻা āĻাāĻāĻĒāĻে āĻāϰেāĻāĻা āĻĄাāĻা āĻাāĻāĻĒে āϰূāĻĒাāύ্āϤāϰ āĻāϰে।
đš āϝāĻāύ āĻĻāϰāĻাāϰ?
- API āĻĨেāĻে āĻāϏা āĻĄাāĻা (DTO) UI āĻŽāĻĄেāϞে āĻāύāĻাāϰ্āĻ āĻāϰāϤে
- Database Entity → UI Model
- UI Model → API Request
- āĻāĻ āϧāϰāĻŖেāϰ āĻ āĻŦāĻেāĻ্āĻāĻে āĻāϰেāĻ āϧāϰāĻŖেāϰ āĻ āĻŦāĻেāĻ্āĻ āĻŦাāύাāϤে
✨ āĻāĻāĻা āĻŦাāϏ্āϤāĻŦ āĻāĻĻাāĻšāϰāĻŖ
āϧāϰো, āϤোāĻŽাāϰ āĻ ্āϝাāĻĒে āĻāĻāĻাāϰেāϰ āϤāĻĨ্āϝ API āĻĨেāĻে āĻāϏāĻে āĻāĻ āĻĢāϰāĻŽ্āϝাāĻে:
data class UserDto(
val id: Int,
val fullName: String,
val email: String
)
đ āĻিāύ্āϤু āϤোāĻŽাāϰ UI-āϤে āĻāĻ āĻĢāϰāĻŽ্āϝাāĻ āĻĻāϰāĻাāϰ:
data class User(
val userId: Int,
val name: String,
val email: String
)
đ Mapper Class āϤৈāϰি āĻāϰা
āĻāĻāύ āĻāĻāĻা Mapper āĻ্āϞাāϏ āĻŦাāύাāĻŦো āϝা UserDto āĻĨেāĻে User āĻŦাāύাāĻŦে!
class UserMapper {
fun map(dto: UserDto): User {
return User(
userId = dto.id,
name = dto.fullName,
email = dto.email
)
}
}
āĻāĻাāύে map() āĻŽেāĻĨāĻĄāĻা āĻāĻāĻা UserDto āĻāύāĻĒুāĻ āύিāϝ়ে User āĻāĻāĻāĻĒুāĻ āĻĻিāĻ্āĻে! đ
đ Extension Function āĻĻিā§ে āĻāϰāĻ āϏ্āĻŽাāϰ্āĻ āĻŽ্āϝাāĻĒিং
āĻāĻāύ UserMapper āĻ্āϞাāϏ āύা āϰেāĻে āĻāĻāĻা Extension Function āĻĻিā§ে āϏāĻšāĻ āĻāϰা āϝাā§।
fun UserDto.toUser(): User {
return User(
userId = this.id,
name = this.fullName,
email = this.email
)
}
āĻāĻāύ āϏāĻšāĻেāĻ UserDto āĻĨেāĻে User āĻŦাāύাāύো āϝাāĻŦে:
val userDto = UserDto(1, "John Doe", "john@example.com")
val user = userDto.toUser()
println(user) // Output: User(userId=1, name=John Doe, email=john@example.com)
đĨ āĻāϰāĻ āϏāĻšāĻ āĻ āĻ্āϞিāύ āĻোāĻĄ!
đ List Mapping (Multiple Items)
āĻāĻāĻা List<UserDto> āĻে List<User> āĻŦাāύাāϤে āĻাāĻāϞে āϏāĻšāĻ āĻāĻĒাā§:
fun List<UserDto>.toUserList(): List<User> {
return this.map { it.toUser() }
}
āĻāĻāύ āϞিāϏ্āĻেāϰ āϏāĻŦ UserDto āĻে āĻāĻ āĻ্āϞিāĻে User āĻŦাāύাāύো āϝাāĻŦে!
val userList = listOf(
UserDto(1, "John Doe", "john@example.com"),
UserDto(2, "Jane Smith", "jane@example.com")
)
val mappedUsers = userList.toUserList()
println(mappedUsers)
đĄ āĻāϰāĻ āĻ ্āϝাāĻĄāĻাāύ্āϏāĻĄ Mapper
āϝāĻĻি āĻŦাāĻ-āĻĄাāĻāϰেāĻāĻļāύাāϞ (āĻāĻāϝ় āĻĻিāĻ āĻĨেāĻে) āĻŽ্āϝাāĻĒিং āĻĻāϰāĻাāϰ āĻšā§, āϤাāĻšāϞে Mapper āĻāύ্āĻাāϰāĻĢেāϏ āĻŦাāύাāύো āϝেāϤে āĻĒাāϰে:
interface Mapper<I, O> {
fun map(input: I): O
fun reverseMap(output: O): I
}
āĻāĻāύ UserMapper āĻāĻŽāĻĒ্āϞিāĻŽেāύ্āĻ āĻāϰāϞে āĻĻুāĻāĻĻিāĻেāϰ āĻŽ্āϝাāĻĒিং āϏāĻšāĻ āĻšāĻŦে:
class UserMapper : Mapper<UserDto, User> {
override fun map(input: UserDto): User {
return User(
userId = input.id,
name = input.fullName,
email = input.email
)
}
override fun reverseMap(output: User): UserDto {
return UserDto(
id = output.userId,
fullName = output.name,
email = output.email
)
}
}
āĻāĻāύ āĻĻুāĻ āĻĻিāĻেāϰ āĻŽ্āϝাāĻĒিং āĻāϰা āϝাāĻŦে:
val userMapper = UserMapper()
val userDto = UserDto(3, "Alice", "alice@example.com")
val user = userMapper.map(userDto)
val backToDto = userMapper.reverseMap(user)
println(user) // User(userId=3, name=Alice, email=alice@example.com)
println(backToDto) // UserDto(id=3, fullName=Alice, email=alice@example.com)
đ¯ Mapper Class āĻেāύ āĻĻāϰāĻাāϰ?
✅ Separation of Concerns: Model āĻ্āϰাāύ্āϏāĻĢāϰ্āĻŽেāϰ āĻাāĻ āĻāϞাāĻĻা āĻšā§ে āϝাā§
✅ Code Reusability: āĻāĻāĻŦাāϰ āϞিāĻāϞে āĻŦাāϰāĻŦাāϰ āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা āϝাā§
✅ Clean Architecture: Data Layer, Domain Layer, UI Layer āĻāϞাāĻĻা āϰাāĻāϤে āϏাāĻšাāϝ্āϝ āĻāϰে
đĨ Mapper āύিā§ে āĻāϰāĻ āĻিāĻু āĻāĻāĻĄিā§া
- Room Database Entity → Domain Model
- API Response → UI Model
- Multiple Data Source āĻŽিāĻ্āϏিং āĻāϰāϤে
đĨ āĻāĻāύ āĻŦāϞো, āϤোāĻŽাāϰ āĻ ্āϝাāĻĒে āĻোāĻĨাā§ Mapper āĻĻāϰāĻাāϰ? đ
Comments
Post a Comment