-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClassMapper.kt
40 lines (30 loc) · 878 Bytes
/
ClassMapper.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// ==== data ====
class PersonSrc(
val name: String,
val salary: SalarySrc
)
class SalarySrc(val amount: Int)
class PersonDst(
val name: String,
val salary: SalaryDst
)
class SalaryDst(val amount: Int)
// ==== mappers ====
interface DataMapper<SOURCE, DESTINATION> {
fun transform(data: SOURCE): DESTINATION
}
class PersonMapper(
private val salaryMapper: DataMapper<SalarySrc, SalaryDst>
) : DataMapper<PersonSrc, PersonDst> {
override fun transform(src: PersonSrc) = PersonDst(
src.name,
salaryMapper.transform(src.salary)
)
}
class SalaryMapper : DataMapper<SalarySrc, SalaryDst> {
override fun transform(src: SalarySrc) = SalaryDst(src.amount)
}
// ==== usage ====
val personSrc = PersonSrc("Oleg", SalarySrc(10))
val personMapper = PersonMapper(SalaryMapper())
val personDst = personMapper.transform(personSrc)