object BookmarkTranslator {
fun toPresentation(model: Bookmark): BookmarkViewModel {
return BookmarkViewModel().build(model.id.value) {
name = model.name
// ommit
}
}
fun toDomainId(viewModel: BookmarkViewModel): Bookmark.Id = Bookmark.Id(viewModel.id.key)
}
class BookmarkViewModel(val id: Id, val name: String, ...) {
companion object {
fun build(key: Int, applier: (BookmarkViewModel.Builder) -> Unit): BookmarkViewModel {
return BookmarkViewModel.Builder(key).apply(applier).build()
}
}
data class Builder(key: Int) {
private val id: BookmarkViewModel.Id = BookmarkViewModel.Id(key)
lateinit var name: String
// ...
fun build(): BookmarkViewModel = BookmarkViewModel(id, name, ...)
}
data class Id(val key: Int, val cratedAt: Date = Date())
}