Руководства

Функция на основе одного UseCase

Подключение снимка UseCase к Model, адаптация в Presenter и отрисовка через MvpView с явно переданным ModelBinding.

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

Функция на основе одного UseCase

В этом счётчике UseCase Forge служит опциональным источником бизнес-состояния. MVP-пакеты от него не зависят: оба продукта соединяет композиция приложения.

1. Определите владельца бизнес-объекта

Внешний StatefulWidget создаёт CounterUseCase и закрывает его в dispose(). MvpView не присваивает себе это владение.

2. Опишите Model функции

dart
final class CounterModel {
  const CounterModel({
    required this.snapshot,
    required this.increment,
  });

  final UseCaseSnapshot<CounterState> snapshot;
  final void Function() increment;
}

Конкретный UseCase не пересекает границу. Model содержит актуальный снимок и одну разрешённую операцию.

3. Создайте стабильный ModelBinding

dart
late final ModelBinding<CounterModel> binding = ModelBinding(
  read: () => CounterModel(
    snapshot: counter.state,
    increment: () => counter.add(const IncrementCounter()),
  ),
  changes: <Stream<Object?>>[counter.stream],
);

ModelBinding создаётся один раз на жизненный цикл функции. Новый экземпляр при каждом построении Flutter означал бы намеренное создание нового Presenter.

4. Адаптируйте состояние в Presenter

Presenter преобразует значение и фазу выполнения в текст и правила взаимодействия. Во время построения ViewState допустимо обратиться к MaterialLocalizations.of(context): используется актуальный контекст, который нигде не сохраняется.

Публичный increment() либо вызывает операцию Model, либо публикует CounterLimitReached. View не повторяет правило лимита.

5. Отобразите готовые значения

Передайте стабильный ModelBinding напрямую в MvpView. Параметр builder получает текущий ViewState и конкретный Presenter. Эффект обрабатывается с актуальным BuildContext, например через ScaffoldMessenger.

6. Проверьте границы

  • View не имеет доступа к CounterModel;
  • Presenter не может отправить необъявленную Command;
  • MvpView владеет Presenter;
  • внешний виджет владеет UseCase и закрывает его;
  • изменение локали или темы сохраняет Presenter и перестраивает ViewState.
ARKTELOS

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