Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVI architektura

The Funtasty
February 21, 2019

MVI architektura

The Funtasty

February 21, 2019
Tweet

More Decks by The Funtasty

Other Decks in Technology

Transcript

  1. State #1 Click Reducer #1 State #2 Text change Reducer

    #2 State #3 time actions states Data flow
  2. State data class LoginState( val email: String, val isEmailError: Boolean,

    val password: String, val buttonState: SubmitFormFieldState ) : MviState
  3. Reducer data class ChangeEmailReducer(val email: String) : LoginReducer() { override

    fun reduce(oldState: LoginState): LoginState { return oldState.copy(email = email) } }
  4. class LoginReactor : MviReactor<LoginState>() { override fun createInitialState() = LoginState("",

    false, "", SubmitFormFieldState.DISABLED) override fun bind(actions: Observable<MviAction<LoginState>>) { val emailChangeAction = actions.ofActionType<OnLoginEmailChangeAction>() emailChangeAction .map { ChangeEmailReducer(it.email) } .bindToView() } } Reactor
  5. View class LoginActivity : BaseActivity<LoginState>() { @Inject lateinit var reactorFactory:

    LoginReactorFactory override fun createReactor(): MviReactor<LoginState> { return getReactor(reactorFactory, LoginReactor::class.java) } override val layoutRes: Int = R.layout.activity_login override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) login_emailEditText.textChanges() .map { OnLoginEmailChangeAction(it.toString()) }.bindToReactor() } override fun bindToState(stateObservable: Observable<LoginState>) { stateObservable.getChange { it.buttonState }.observeState { login_button.buttonState = it } } }
  6. View class LoginActivity : BaseActivity<LoginState>() { @Inject lateinit var reactorFactory:

    LoginReactorFactory override fun createReactor(): MviReactor<LoginState> { return getReactor(reactorFactory, LoginReactor::class.java) } override val layoutRes: Int = R.layout.activity_login override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) login_emailEditText.textChanges() .map { OnLoginEmailChangeAction(it.toString()) }.bindToReactor() } override fun bindToState(stateObservable: Observable<LoginState>) { stateObservable.getChange { it.buttonState }.observeState { login_button.buttonState = it } } }
  7. View class LoginActivity : BaseActivity<LoginState>() { @Inject lateinit var reactorFactory:

    LoginReactorFactory override fun createReactor(): MviReactor<LoginState> { return getReactor(reactorFactory, LoginReactor::class.java) } override val layoutRes: Int = R.layout.activity_login override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) login_emailEditText.textChanges() .map { OnLoginEmailChangeAction(it.toString()) }.bindToReactor() } override fun bindToState(stateObservable: Observable<LoginState>) { stateObservable.getChange { it.buttonState }.observeState { login_button.buttonState = it } } }
  8. Reactor class LoginReactor : MviReactor<LoginState>() { override fun createInitialState() =

    LoginState(...) override fun bind(actions: Observable<MviAction<LoginState>>) { val onBackAction = actions.ofActionType<OnBackAction>() onBackAction .map { BackEvent } .bindToView() } }
  9. View class LoginActivity : BaseActivity<LoginState>() { // ... override fun

    bindToEvent(eventsObservable: Observable<MviEvent<LoginState>>) { eventsObservable.observeEvent { event -> when (event) { BackEvent -> onBackPressed() } } } }
  10. Vlastnosti override fun bind(actions: Observable<MviAction<JobCreateState>>) { val onBackAction = actions.ofActionType<OnBackAction>()

    val onCategorySelectedAction = actions.ofActionType<OnCategorySelectedAction>().share() val addApplicantAction = actions.ofActionType<AddApplicantAction>() val removeApplicantAction = actions.ofActionType<RemoveApplicantAction>() val onDescriptionChangeAction = actions.ofActionType<OnDescriptionChangeAction>().share() val onDressCodeChangeAction = actions.ofActionType<OnDressCodeChangeAction>().share() val onBeginDateChangeAction = actions.ofActionType<OnBeginDateChangeAction>().share() val onBeginTimeChangeAction = actions.ofActionType<OnBeginTimeChangeAction>().share() val onEndDateChangeAction = actions.ofActionType<OnEndDateChangeAction>().share() val onEndTimeChangeAction = actions.ofActionType<OnEndTimeChangeAction>().share() val createJobAction = actions.ofActionType<CreateJobAction>() val resolveCreateJobAction = actions.ofActionType<ResolveCreateJobAction>() val onAutomaticConfirmForJobAction = actions.ofActionType<OnAutomaticConfirmForJobAction>() val onAutomaticConfirmForJobConfirmedAction = actions.ofActionType<OnAutomaticConfirmForJobConfirmedAction>() val onCancelAutomaticConfirmForJobConfirmedAction = actions.ofActionType<OnCancelAutomaticConfirmForJobConfirmedAction>() val onPayoffTypeChangeAction = actions.ofActionType<OnPayoffTypeChangeAction>() val onChooseCateringAddressClickAction = actions.ofActionType<OnChooseCateringAddressClickAction>() val onCateringApplicantChangeAction = actions.ofActionType<OnCateringApplicantChangeAction>() val onVenueChangeAction = actions.ofActionType<OnVenueChangeAction>() val onAddressChangeAction = actions.ofActionType<OnAddressChangeAction>()
  11. Q&A