VIPER – 交互者是否只返回必要的信息?

在VIPERdevise模式中,Interactor是否应该返回可能由多个演示者动作使用的所有信息,还是应该为每个演示者分别创build一个结构?

就我而言,我有一个显示地点的地图。 为了显示这些地方,我需要从PlacesInteractor中检索一个PlaceItem列表,它只能有一个坐标和一个颜色(用来改变Pin的头部颜色),这个坐标和颜色可以被演示者转换成注释。

现在让我们说,当用户select地图中的一个注释时,应该显示一个标注气泡,其中包含更多详细信息,如地点名称和带颜色的圆圈。

现在我应该创build一个RetrievePlaceCalloutInteractor,它只返回一个地方的信息,而不是多个地方的信息列表(对吗?或者我应该只有一个Interactor用于这两个场景?)。

如果这个RetrievePlaceCalloutInteractor只返回一个PlaceCalloutItem,只有这个地方的名字和颜色(没有坐标),或者我应该有一个带有坐标,颜色和名字的PlaceItem,它将被RetrievePlaceCalloutInteractor和PlaceInteractor返回,并且会被使用由主持人构build一个CalloutStruct或者一个MKAnnotations列表?

谢谢。

VIPER是一种模式,不是一个非常正式的模式,不是一种宗教或一个完整的应用程序架构。 对我来说,VIPER帮助我更多地思考一个更清洁的架构,但是我必须做出更好的决策,而不是关注VIPER,而是关于干净的架构。 所以,从我的经验和我的观点来看,你的问题的答案是“依赖”。

在我的情况下,大多数“项目”(我称之为从显示对象或数据对象的DO)几乎与“实体”(我称之为模型对象的MO)有一对一的关系。 大多数交互者操纵一种types的实体,他们有一个MO-DO映射器。 如果交互器处理多个用例,我通常对不同的用例使用相同的DO。

我也有一些模块为不同的用例使用不同的DOs,虽然他们涉及到同一个实体,我也有一些DOs结合了几个实体的信息,比如我需要用户名将它添加到“编辑通过博客文章“我使用相同的DO来结合邮政用户实体。

我觉得VIPER'需要'每个模块的一个交互器,这种方式迫使你有多个用例(相关),但是如果你想使用不同的项目(我的DO)或者只有一个,这取决于你。

作为一个干净的架构的纯粹你应该有不同的互动者,不同的要求和不同的反应,每个用例。

所以,当我开始的时候,这取决于,重要的是要正确划定边界,不pipe它是一个还是十个项目。