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

MVI architektura

Avatar for The Funtasty The Funtasty
February 21, 2019

MVI architektura

Avatar for The Funtasty

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