两个具有类似功能VIPER的视图控制器

时间:2016-06-06 11:53:27

标签: ios xcode swift architecture viper-architecture

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

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

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

我是否应该使用此功能创建第三个模块,然后以某种方式将其他模块从中继承?或者可能有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

我使用的唯一类似的组件/方法是Data Managers,它可以在您想要的多个Interactors之间共享,但仍然100%符合VIPER架构。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于这两个模块,请尝试提取相似之处,并尝试构建一个类。如果两个类在使用通用的数据类型上有所不同,那么您也可以使用协议,因此可以在一个协议中声明两个模块的通用方法,并将每个模块实现为扩展。 也许本教程会有所帮助。 https://medium.com/@richiemon/protocol-extension-dispatching-6d5229f1338e