Изучение

Архитектура и границы

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

v0.1.0-dev.1Начальный уровень

Архитектура и границы

Ark MVP задаёт правила потока представления, не навязывая способ создания, хранения или выполнения бизнес-логики.

Четыре роли

РольПолучаетСоздаётВладеет
Композиция приложенияСуществующие бизнес-объектыModelBinding<Model>Бизнес-объекты и их жизненный цикл
ModelАктуальные бизнес-снимки и разрешённые операцииЕдиный неизменяемый снимок функцииНе владеет ресурсами
PresenterModel и окружение представленияViewState, действия, ViewEffectЛокальное состояние и ресурсы представления
ViewViewState и публичный API PresenterИнтерфейс и намерения пользователяРесурсы отрисовки фреймворка

Направление зависимостей

ark_mvp не зависит от менеджера состояния, DI-контейнера, хранилища или UI-фреймворка. ark_mvp_flutter добавляет только размещение во Flutter. UseCase Forge может предоставлять бизнес-состояние через композицию приложения, но не становится зависимостью MVP-пакетов при выполнении.

Так сохраняются два равноправных сценария:

  • функция на основе одного или нескольких UseCase;
  • функция на основе любой другой типизированной границы состояния приложения.

Что не должно пересекать границу

Model не стоит передавать HTTP-клиент, соединение с базой или глобальный контейнер только потому, что они доступны композиции. Model предоставляет нужные этой функции бизнес-данные и операции: reload(), saveDraft() или signOut().

View, в свою очередь, не должен интерпретировать фазы выполнения, объединять несколько менеджеров или локализовать сырые доменные значения. Эти решения определяют смысл представления и относятся к Presenter.

Никакого скрытого владения

ModelBinding наблюдает внешние источники. PresenterSession владеет одним жизненным циклом Presenter. Flutter-виджет MvpView закрывает Presenter, но не UseCase или менеджер, захваченный binding. Создатель ресурса остаётся ответственным за его завершение.

ARKTELOS

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