如何使用 VIPER 架构的导航组件?

How to use navigation component with VIPER architecture?

我正在尝试通过本教程学习如何将 VIPER 与 android 结合使用 https://www.raywenderlich.com/5192-android-viper-tutorial 但是在教程的最后它说很难实现作为架构核心层的路由器层.. 无论如何都可以实现 viper 并且它是跨导航组件的路由器层

  • 路由器是导航;导航是路由器。你不应该按照你提出问题的方式来思考,因为“实现……路由器……跨导航组件”会误导你的思维。 https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial 在建立关于 VIPER 的良好思考方面简洁明了,尽管如果它能更强烈地说明以下几点,甚至会更好:100% 的消息传递和 data-structures/entities 以及 V I P R 之间的概念夹层层必须是严格的应用程序域概念,与 Apple-think 或 Android-think 或 Microsoft-think 无关。所有 {Apple-frameworks-think, Android-think, Microsoft/UWP-think} 必须在每个 V I R 层中隔离,并且根本不会出现在 P 和 E 层中。
  • 最好从VIPER和MVVM-C的例子中学习导航。 MVVM-C的C和VIPER的R几乎一模一样;两者都负责导航。有多个 example/sample 应用程序(以及少数开源的成熟应用程序)使用 VIPER 或 MVVM-C。通过 Bing 或 Google 搜索它们。如果 MVVM-C 正确完成,应用程序域 concepts/data-structures/messaging/entities 在 VM 和 C 之间流动而 VM 和 C 层之间没有来自 {Android-think, Apple-think, Microsoft-think}.即使在某些 sample/example MVVM-C 应用程序中,VM 和 C 层之间的消息传递与 {Apple-think, Android-think, Microsoft-think} 混为一谈,您仍然可以通过翻译操作从中学习-environment-pollution 夹层到严格的应用程序域信息流夹层,但这几乎是 how-to-convert-my-app-to-reactive/Rx 技术,通过插入 {RxKotlin, RxSwift, RxScala, ZIO+CatsEffect} effect/outcome-centric 反应性信息流夹层代替一些以{Android、苹果、微软}为中心的delegate/callback机制。
  • 因为 VIPER 和 MVVM-C 和 Clean 都需要一种纯粹的应用程序域间消息传递方式,这种方式在 中隔离了 {Apple-think,Android-think,Microsoft-think} 每个 layer/zone(例如,保持 Apple-think/Android-think/Microsoft-think 表示 UI 的方式严格隔离 在 VIPER 中的 视图层;保持 Apple-think/Android-think/Microsoft-think 在 VIPER 中 within 路由器层表示导航的方式),设计团队经常选择使用事件驱动的函数式编程式反应方式来表示严格的应用程序域在 VIPER 中的每个 V I P R 层之间流动的消息传递(E 实体是表示层之间应用程序域概念的通用语言)。因此,您可以经常使用这样的反应式框架(例如,RxSwift 在 Apple 世界中;ZIO 或 Cats Effect 或 RxScala 在 Android 世界的 Scala 思想流派中;RxKotlin 在 Kotlin 思想流派中Android world)作为该反应式框架的示例或示例应用程序的主要搜索词,然后从结果列表中挑选 VIPER 或 MVVM-C 示例或示例应用程序,例如 https://AwesomeOpenSource.com/projects/rxswift其中描述指出哪些教授 VIPER 或 MVVM-C 的 R 或 C 技术,您会发现这些技术很有启发性。