8

我正在开发一个非常大的应用程序,并决定采用模块化方法,其中每个功能都作为框架实现,一个功能不应该“知道”其他功能。

我决定大量使用ReSwift,它是一个遵循 REDUX 原则构建 iOS 应用程序的库。

我已经设法将全局应用程序状态与所有功能状态分离,因此每个功能都定义了自己的状态,并且全部由全局应用程序状态管理。

我面临的下一个挑战是路由/导航。我希望能够在位于 Feature1 的一个视图控制器与位于 Feature2 的另一个视图控制器之间进行路由(请记住:我想避免功能之间的依赖关系,因此 Feature1 对 Feature2 一无所知)。

我知道我可以在我的应用程序中创建一个可以处理应用程序所有路由的中心位置,但我想知道是否有一种方法可以让每个功能都实现自己的路由。所以 Feature1 将路由到 Feature2 而不调用一些中央实现。这里的动机是每个功能都会为应用程序提供自己的资源。所以在 REDUX 原则中,每个特性都应该提供:State、Reducer、Actions 和 Router,但这里的挑战是特性不依赖于其他特性。

用于路由的 PS 我决定使用ReSwift-Router,它是 ReSwift 应用程序的声明式路由库。

谢谢!

4

1 回答 1

1

看起来我们正在使用类似的架构模式,尽管我决定在每个模块中定义路由器协议,所有这些都在某个中央路由器模块中实现。这将模块分开,但我仍然能够使用集中状态并调度整个应用程序。

在使用了一些路由器库之后,我制作了自己的基于状态的解决方案来更好地处理 VC 层次结构,仍然将状态与 UI 分开。

我认为它符合您的要求。

https://github.com/nikans/MonarchRouter

君主路由器

Monarch Router 是一个声明式路由处理程序,它通过 Coordinator 和 Presenters 将 ViewController 彼此分离。它非常适合 Redux 风格的状态流和反应式框架。

Coordinator 是通过声明与 URL 结构映射的路由层次结构来构建的。演示者抽象 UI 创建和修改。

特征:

  • 导航复杂的 ViewControlles 层次结构并在路径更改时展开。
  • 深度链接以处理推送通知、快捷方式和通用链接。
  • 通过更改窗口的 rootViewController 来切换顶级应用程序部分。
  • 导航叉(类似于演示者的标签栏)。
  • 导航堆栈(即导航控制器)。
  • 打开和关闭模式,具有自己的层次结构。
  • 解析路由参数并将其传递给端点。
于 2018-11-24T10:37:41.093 回答