【问题标题】:Two view controllers with similar functionality VIPER两个具有相似功能的视图控制器 VIPER
【发布时间】:2016-10-06 00:31:19
【问题描述】:

我目前正在尝试在我的项目中实现 VIPER 架构,并且遇到了一些问题。

我的应用程序中有两个模块,它们具有一些相似的功能(它们都具有 imagePicker 和将媒体上传到服务器的能力,这两个屏幕的实现完全相同)。

我的问题是如何在两个模块中重复使用这种类似的功能?问题是我的 imagePicker 在 Interactor 中声明了许多方法,这些方法在选择和上传图像时处理不同的事件(例如 didUploadMediaFile()、didFailToUploadMediaFile()、uploadMediaFile() 等)。

我是否应该创建具有此功能的第三个模块,然后以某种方式将我的其他模块子类化?或者也许有更好的方法?

【问题讨论】:

    标签: ios xcode swift architecture viper-architecture


    【解决方案1】:

    对于这两个模块尝试抽象相似之处并尝试构建一个类。如果两个类的数据类型不同,使用泛型,你也可以使用协议,所以在一个协议中声明两个模块的公共方法,并将它们中的每一个作为扩展来实现。 也许本教程会有所帮助。 https://medium.com/@richiemon/protocol-extension-dispatching-6d5229f1338e

    【讨论】:

      【解决方案2】:

      我会使用的唯一类似的组件/方法是 Data Managers,它可以在您想要的任意数量的交互器之间共享,并且 100% 符合 VIPER 架构。

      因此,一个名为 MediaApiDataManager() 的 DataManager 将负责将核心代码实现到 UploadMediaFile()

      我建议您阅读这篇文章以了解有关 VIPER 的更多精彩提示:https://www.ckl.io/blog/best-practices-viper-architecture/

      【讨论】:

        【解决方案3】:

        我认为您需要创建抽象类并在 imagePicker 逻辑中实现。使用 didUploadMediaFile()、didFailToUploadMediaFile()、uploadMediaFile() 方法为 it 类声明接口(协议),在类中实现此方法并注入您的 VIPER 模块

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多