マーカーインターフェース
PulseDesktop は、ジェネリクスのレベルで型安全性を保証するためにマーカーインターフェースを使います。どのインターフェースもメンバーを持たず、型パラメータを制約するためだけに存在します。
PulseState
kotlin
interface PulseStateクラスを PulseViewModel が管理する UI 状態として印付けます。不変な更新に copy() を使えるよう、data class で実装してください。
kotlin
data class CounterState(
val count: Int = 0,
val isLoading: Boolean = false,
) : PulseStatePulseAction
kotlin
interface PulseActionクラスを PulseViewModel に発行されるユーザーの意図として印付けます。取りうる Action をすべて列挙できるよう、sealed class で実装してください。
kotlin
sealed class CounterAction : PulseAction {
data object Increment : CounterAction()
data object Decrement : CounterAction()
data class SetValue(val value: Int) : CounterAction()
}PulseEvent
kotlin
interface PulseEventクラスを PulseViewModel から UI へ発行される一度きりの副作用として印付けます。sealed class で実装してください。
kotlin
sealed class CounterEvent : PulseEvent {
data class ShowMessage(val message: String) : CounterEvent()
data object NavigateBack : CounterEvent()
}PulseBroadcast
kotlin
interface PulseBroadcastクラスを Broadcast メッセージとして印付けます。PulseContainer から、登録済みのすべての PulseViewModel インスタンスへ届けられます。sealed class で実装してください。
kotlin
sealed class AppBroadcast : PulseBroadcast {
data object UserLoggedOut : AppBroadcast()
data class ThemeChanged(val isDark: Boolean) : AppBroadcast()
}PulseUnicast
kotlin
interface PulseUnicastクラスを Unicast メッセージとして印付けます。子の PulseViewModel から親の PulseContainer へ発行されます。sealed class で実装してください。
kotlin
sealed class AppUnicast : PulseUnicast {
data object SaveRequested : AppUnicast()
data class ItemSelected(val id: String) : AppUnicast()
}