gpt4 book ai didi

iOS VIPER 架构,谁来实例化一个完整的模块?

转载 作者:技术小花猫 更新时间:2023-10-29 11:14:57 29 4
gpt4 key购买 nike

考虑到VIPER结构

enter image description here

我有两个模块,A 和 B。第一个模块 A,通过演示者,想要执行一个必须在模块 B 中完成的 Action ,所以告诉它的线框去做。问题是,谁负责实例化整个模块( View 、交互器、演示器……)。我看到了一些采用不同方法的示例:

  • 在应用程序的开头创建所有模块。
  • 在模块的线框中创建整个模块,因此在这种情况下,BWireframe 的类方法实例化所有 B 模块。

考虑到线框负责路由,是否也负责创建其模块?

最佳答案

TL;DR:我建议您使用像 Typhoon 这样的 DI 框架并让它处理实例化。

您可能不希望您的线框实例化 VIPER 模块(View、Presenter、Interactor、DataManager)中的所有内容的原因是您将直接为这些组件中的每一个创建依赖项。

依赖性使软件难以改变:如果我们用我们的 onion architecture 来思考它/hexagonal architecture戴上帽子,通过不仅了解 View ,还了解数据管理器,线框将跨越至少两个独立的洋葱层的边界。

这迫使我们将线框图视为通用基础设施类:即,位于您应用程序最外层的东西。

但是,这与线框的其他(也是更真实的)职责相矛盾:进行导航。虽然这仍然是基础设施层,但它属于 UIKit(-presentViewController: 等)。

所以恕我直言,VIPER 的线框做得太多了。

唯一明智的做法是拆分这两个职责:

  1. VIPER 类的初始化:你可以引入一个 factory , 或者使用专为解决这个问题而设计的 DI 工具
  2. 进行导航:这属于线框的范围。

附加说明

如果您想知道“实例化了下一个模块?”,那么,恕我直言,我认为某些模块 A 的线框与模块 B 的线框尽管 VIPER post 是什么说。

原因是 Module A 现在将依赖于 Module B,导致紧密耦合:这违背了模块的目的。更多关于这个话题的讨论在 VIPER-TODO project at GitHub =]

希望这对您有所帮助。

关于iOS VIPER 架构,谁来实例化一个完整的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442094/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com