Mavericks 구현에 대해 조금 더 알아보자.
interface MavericksView : LifecycleOwner {
fun invalidate()
}
State
사용되는 모든 Kotlin Data Class에서 구현해야하는 인터페이스이다.
오직 Mavericks
가 올바르게 동작하도록 설정하기 위해서만 사용된다.
Fragment arguments를 사용해 초기화해야 하는 경우는 보조 생성자를 만든다. 이 ViewModel을 초기화하는 fragment가 Mavericks
에서 argument가 있는 경우 Mavericks.KEY_ARG로 보조 생성자로 자동으로 전달된다.
MxRx Fragment 위임자를 통해 작성된 MavericksViewModel에서 상태 변경을 처리하려면 invalidate()
를 override한다.
class DogFragment : Fragment(), MavericksView {
// something
...
override fun invalidate() { / *..* / }
}
abstract class MavericksViewModel<S : MavericksState>(initalState: S) {
/* .. */
}
모든 뷰모델 클래스는 MavericksViewModel
을 확장해야한다. Mavericks에서 ViewModel은 단일 클래스로 한다. ViewModel은 setState
를 통해 모든 상태를 수정, 소유하고 다른 클래스는 상태를 관찰할 수 있다.
MavericksView/Fragment에서 ViewModel delegates를 사용하면 lifecycle-aware
에 따라 자동으로 구독하고 상태를 업데이트 할 수 있다. 이에따라 변경될 때마다 MavericksView.invalidate
가 호출된다.