Изучение
Жизненный цикл и владение
Состояния PresenterSession, переходы Model, обновление представления, завершение и граница владения бизнес-объектами.
Жизненный цикл и владение
Один экземпляр Presenter принадлежит одной сессии.
created → active → closing → closed
Порядок подключения
- Создать Presenter и подключить начальную Model.
- Подписаться на обновления и эффекты.
- Запустить сессию и один раз вызвать
onModelAttached. - Построить первый ViewState.
Подписка до start() обязательна: onModelAttached вправе запросить обновление представления или опубликовать начальный эффект.
Переходы Model
updateModel(current) сохраняет новую Model перед вызовом onModelChanged(previous, current). Каждый сигнал создаёт переход. Ark MVP не отбрасывает равные Model, поскольку правила равенства приложения могут не учитывать важную для представления информацию.
Обновление ViewState
Размещающий компонент повторно обращается к Presenter при изменении Model, после invalidateView() или при изменении окружения представления. buildViewState только вычисляет данные: внутри него нельзя отправлять команды, открывать новый экран или публиковать эффекты.
Завершение
close() один раз вызывает closePresenter() и закрывает выходные каналы даже при ошибке очистки. Закрытый Presenter нельзя подключить повторно: иначе устаревшее состояние и подписки перейдут в другой жизненный цикл функции.
Владельцы ресурсов
| Ресурс | Владелец |
|---|---|
| UseCase, менеджер состояния, координатор Repository | Композиция приложения |
| ModelBinding | Объект, создавший binding |
| Presenter и его локальные ресурсы | PresenterSession или MvpView |
| Flutter-контроллеры и анимации | Отрисовывающий StatefulWidget |
Закрытие View завершает Presenter, но не бизнес-источники из ModelBinding.