Изучение

Presenter как граница адаптации

Преобразование полного бизнес-снимка в готовые данные представления, публичные действия функции и контролируемые одноразовые эффекты.

v0.1.0-dev.1Средний уровень

Presenter как граница адаптации

Presenter находится между Model и View. Его основная задача состоит не в пересылке состояния, а в определении смысла представления.

dart
final class CounterPresenter extends Presenter<
    CounterModel,
    CounterViewState,
    CounterEffect,
    CounterEnvironment> {
  @override
  CounterViewState buildViewState(CounterEnvironment environment) {
    return CounterViewState(
      valueLabel: environment.formatNumber(model.value),
      canIncrement: model.value < 100,
    );
  }

  void increment() {
    if (model.value >= 100) {
      emitEffect(const CounterLimitReached());
      return;
    }
    model.increment();
  }
}

Задачи Presenter

  • объединять несколько бизнес-снимков в состояние одного экрана;
  • преобразовывать доменные значения в локализованный и отформатированный текст;
  • вычислять видимость, доступность действий, загрузку, пустое состояние и ошибки;
  • предоставлять View именованные действия функции;
  • сравнивать значимые переходы Model перед публикацией эффекта;
  • при необходимости хранить небольшое состояние представления.

Что не относится к Presenter

  • владение UseCase, Repository или менеджером приложения из Model;
  • сохранение BuildContext для будущего вызова;
  • побочные действия внутри buildViewState;
  • хранение бизнес-данных, которые должны пережить View;
  • передача Model дочерним виджетам.

Локальное состояние представления

Выбранная вкладка или раскрытая панель может принадлежать Presenter, если её сброс вместе с функцией допустим. После изменения вызывается invalidateView(). Если сброс нарушит ожидаемое поведение продукта, значение должно жить в более долгоживущей бизнес-границе и поступать в Presenter через Model.

ARKTELOS

Инженерные системы для программного обеспечения, которое обязано выдерживать нагрузку.