我目前正在尝试在我的项目中实现VIPER架构,并且遇到了一些问题。
我的应用程序中有两个模块,它们具有一些类似的功能(它们都有imagePicker和上传媒体到服务器的能力,两个屏幕的实现完全相同)。
我的问题是如何在两个模块中重用这个类似的功能?麻烦的是我的imagePicker有许多在Interactor中声明的方法,它们在选择和上传图像时处理不同的事件(例如didUploadMediaFile(),didFailToUploadMediaFile(),uploadMediaFile()等等)。
我是否应该使用此功能创建第三个模块,然后以某种方式将其他模块从中继承?或者可能有更好的方法吗?
答案 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