UI 이벤트
UI 레이어에서 UI 또는ViewModel
로 처리해야 하는 작업
ViewModel
: 비즈니스 로직을 처리하는 클래스
비즈니스 로직 : 결제 또는 사용자 환경설정 저장과 같이 상태 변경과 관련하여 필요한 조치
어댑터에서 뷰모델을 직접 참고하고 있으면 안되고,
어댑터에서 뷰모델의 데이터에 접근 해야 되는 경우에는 아래와 같이 람다 함수를 이용해야 합니다.
data class NewsItemUiState(
val title: String,
val body: String,
val bookmarked: Boolean = false,
val publicationDate: String,
val onBookmark: () -> Unit
)
class LatestNewsViewModel(
private val formatDateUseCase: FormatDateUseCase,
private val repository: NewsRepository
)
val newsListUiItems = repository.latestNews.map { news ->
NewsItemUiState(
title = news.title,
body = news.body,
bookmarked = news.bookmarked,
publicationDate = formatDateUseCase(news.publicationDate),
// Business logic is passed as a lambda function that the
// UI calls on click events.
onBookmark = {
repository.addBookmark(news.id)
}
)
}
}