Руководства

Несколько UseCase на одном экране

Объединение независимых снимков на границе представления без переноса атомарной бизнес-координации в MVP.

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

Несколько UseCase на одном экране

Экран профиля может загружать данные и сохранять изменения через разные UseCase. MVP способен представить оба процесса, не объявляя их единой бизнес-транзакцией.

1. Поместите оба снимка в Model

dart
final class ProfileModel {
  const ProfileModel({
    required this.profile,
    required this.save,
    required this.reload,
    required this.updateName,
  });

  final UseCaseSnapshot<ProfileState> profile;
  final UseCaseSnapshot<SaveProfileState> save;
  final void Function() reload;
  final void Function(String name) updateName;
}

2. Наблюдайте оба источника

ModelBinding.changes содержит оба Stream, повторяющих последнее значение. После сигнала любого источника read() получает оба актуальных снимка. Presenter работает с полным состоянием функции, а не с частичным событием.

3. Постройте единые правила экрана

Presenter объединяет загрузку, сохранение, имя, статус и доступность кнопок в один ProfileViewState. View не определяет, какой UseCase занят, и не объединяет две подписки.

4. Публикуйте эффект только при значимом переходе

Повтор последнего состояния и явное начальное чтение могут дать эквивалентные снимки. Перед ProfileSaved сравните предыдущую и текущую фазы сохранения. Не публикуйте эффект безусловно из onModelChanged.

5. Оставьте бизнес-координацию в бизнес-слое

Агрегация для экрана корректна, пока загрузка и сохранение остаются независимыми операциями. Если они обязаны выполняться атомарно, требуется единая координирующая бизнес-граница. Ark MVP не запрещает такое решение, но и не навязывает его.

Владелец функции закрывает оба UseCase. MvpView закрывает один Presenter. Model и ViewState остаются неизменяемыми значениями без ресурсов.

ARKTELOS

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