Как выполнить маршрутизацию в iOS swift модульном приложении? - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над очень большим приложением и решил использовать модульный подход, в котором каждая функция реализована в виде фреймворка, а одна функция не должна «знать» другие функции.

Я решил интенсивно использовать в ReSwift , которая является библиотекой для создания приложений для iOS, следуя принципам REDUX.

Мне удалось отделить глобальное состояние приложения от всех состояний функций, чтобы каждая функция определяла свое собственное состояние, и все они управляются глобальным состоянием приложения.

Следующая проблема, с которой я столкнулся, - это Маршрутизация / Навигация. Я хочу иметь возможность маршрутизировать между одним контроллером представления, который находится в Feature1, к другому контроллеру представления, который расположен в Feature2 (Помните: я хочу избежать зависимостей между функциями, поэтому Feature1 ничего не знает о Feature2).

Я знаю, что могу создать центральное место в моем приложении, которое может обрабатывать все маршруты приложения, но я хотел знать, есть ли способ, чтобы каждая функция реализовала свой собственный маршрут. Таким образом, Feature1 будет перенаправлять на Feature2, не обращаясь к какой-либо центральной реализации. Мотивация заключается в том, что каждая функция предоставит приложению свои собственные ресурсы . Таким образом, в принципах REDUX каждая функция должна обеспечивать: состояние, редуктор, действия и маршрутизатор, но проблема в том, что функции не зависят от других функций.

P.S. для маршрутизации я решил использовать ReSwift-Router , который является декларативной библиотекой маршрутизации для приложений ReSwift.

Спасибо!

1 Ответ

0 голосов
/ 24 ноября 2018

Похоже, мы используем похожий шаблон архитектуры, хотя я решил определить протоколы маршрутизатора в каждом модуле, все из которых реализованы в каком-то модуле центрального маршрутизатора. Это разделяет модули, но я все еще могу использовать централизованное состояние и диспетчеризацию для всего приложения.

Поработав с некоторыми библиотеками маршрутизаторов, я создал собственное решение на основе состояний для лучшей обработки иерархии VC, по-прежнему отделяющее состояние от пользовательского интерфейса.

Я думаю, что это соответствует вашим требованиям.

https://github.com/nikans/MonarchRouter

Monarch Router

Monarch Router - это декларативный обработчик маршрутизации, который отделяет ViewControllers друг от друга через координатора и докладчиков. Он отлично сочетается с платформой State Flow и Reactive в стиле Redux.

Координатор создается путем объявления иерархии маршрутов, сопоставленной со структурой URL. Создание и изменение абстрактного пользовательского интерфейса.

Особенности:

  • Навигация по сложной иерархии ViewControlles и разматывание при изменении пути.
  • Глубокая ссылка для обработки push-уведомлений, ярлыков и универсальных ссылок.
  • Переключение разделов приложения верхнего уровня посредством изменения окна rootViewController.
  • Навигация по вилкам (панель вкладок, как у докладчиков).
  • Навигационные стеки (т.е. навигационный контроллер).
  • Открытие и отклонение модалов со своей собственной иерархией.
  • Разбор и передача параметров маршрута в конечные точки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...