Изучение
Архитектура и границы
Где начинается Ark MVP, чем владеет каждая роль и почему пакеты не зависят от конкретного бизнес-фреймворка.
Архитектура и границы
Ark MVP задаёт правила потока представления, не навязывая способ создания, хранения или выполнения бизнес-логики.
Четыре роли
| Роль | Получает | Создаёт | Владеет |
|---|---|---|---|
| Композиция приложения | Существующие бизнес-объекты | ModelBinding<Model> | Бизнес-объекты и их жизненный цикл |
| Model | Актуальные бизнес-снимки и разрешённые операции | Единый неизменяемый снимок функции | Не владеет ресурсами |
| Presenter | Model и окружение представления | ViewState, действия, ViewEffect | Локальное состояние и ресурсы представления |
| View | ViewState и публичный 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. Создатель ресурса остаётся ответственным за его завершение.