Что такое стратегии в Moxy

Ответ

Стратегии в Moxy — это механизмы, определяющие, как и когда обновлять View. Они управляют жизненным циклом View и решают, нужно ли применять изменения сразу или отложить их (например, при повороте экрана).

Пример стратегии:

@InjectViewState
class Presenter : MvpPresenter<View>() {
    fun loadData() {
        viewState.showLoading()
        // Загрузка данных
        viewState.showData(data)
    }
}

@StateStrategyType(AddToEndSingleStrategy::class)
interface View : MvpView {
    fun showLoading()
    fun showData(data: List<String>)
}

Популярные стратегии:

  • AddToEndSingleStrategy — заменяет последний такой же вызов.
  • SkipStrategy — игнорирует повторные вызовы.
  • OneExecutionStrategy — выполняет вызов только один раз.

Стратегии помогают избежать лишних обновлений View и управлять состоянием при изменении конфигурации.

Ответ 18+ 🔞

Слушай, а вот эти стратегии в Moxy — это вообще отдельная песня, блядь. Представь себе: твой презентер орет на вьюху, как сумасшедший, команды сыпятся одна за другой, а вьюха стоит такая и думает: "Ну и нахуя мне это всё?" Вот чтобы она не сошла с ума, и нужны стратегии. Это такой умный фильтр, который решает, какую команду выполнить сейчас, какую отложить, а какую — выкинуть в помойку, потому что она уже устарела.

Вот смотри, как это выглядит в коде, тут всё чётко:

@InjectViewState
class Presenter : MvpPresenter<View>() {
    fun loadData() {
        viewState.showLoading() // Окей, показываем крутилку
        // Тут типа долгая загрузка данных из интернета
        viewState.showData(data) // А вот и данные пришли
    }
}

// А вот самое важное — директива для вьюхи!
@StateStrategyType(AddToEndSingleStrategy::class)
interface View : MvpView {
    fun showLoading()
    fun showData(data: List<String>)
}

А теперь про сами стратегии, их там дохуя, но основные вот эти:

  • AddToEndSingleStrategy — хитрая жопа. Если ты дважды шлёшь команду showLoading(), то первая команда встанет в очередь, а вторая её просто заменит. Как будто ты в чате переписываешь своё же сообщение, пока его не отправил. Удобно, чтобы не моргать интерфейсом как ёбнутый.
  • SkipStrategy — вообще доверия ебать ноль к повторным командам. Если showData(data) уже вызывалась с такими же данными — второй раз она даже не почешется. Игнорирует, блядь, наглым образом. Экономит батарейку и нервы.
  • OneExecutionStrategy — это вообще перфекционист. Выполнит команду ровно ОДИН раз за всю жизнь вьюхи. Второй раз уже ни за какие коврижки. Полезно для каких-нибудь одноразовых тостов или навигационных действий.

Короче, без этих стратегий при повороте экрана у тебя всё начнёт вызываться по десять раз, вьюха будет глючить, как пьяный, и в итоге приложение накроется медным тазом. А так — красота, всё под контролем. Умная штука, ебать мои старые костыли.