在VIPER设计模式中,交互者应该返回多个演示者操作可能使用的所有信息,还是应该为每个操作系统分别使用一个结构?
就我而言,我有一张显示地点的地图。为了显示那些我需要从PlacesInteractor中检索PlaceItem列表的地方,这些PlaceInter可能只有一个坐标和一个颜色(用于改变引脚的头部颜色),它将被转换为注释。主持人。
现在假设当用户选择地图中的一个注释时,应该显示一个标注气泡,其中包含更多详细信息,例如地点名称和带有颜色的圆圈。
现在我应该创建一个RetrievePlaceCalloutInteractor,它只返回一个地方的信息而不是多个地方的信息列表(对吗?或者我应该只为这两个场景只有一个交互器?)。
此RetrievePlaceCalloutInteractor是否应返回PlaceCalloutItem仅包含地点的名称和颜色(无坐标),或者我应该有一个带坐标,颜色和名称的PlaceItem,它将由RetrievePlaceCalloutInteractor和PlaceInteractor返回,以及演示者是否会使用它来构建CalloutStruct或MKAnnotations列表?
谢谢。
答案 0 :(得分:2)
VIPER是一种模式,不是非常正式的模式,不是宗教或完整的应用程序架构。对我而言,VIPER帮助更多地考虑了一个更清洁的架构,但在我不得不做出更好的针对我的特定场景的决策的方式,而不关心VIPER但关于清洁架构。因此,根据我的经验和我的观点,您的问题的答案取决于'。
就我而言,大多数'项目' (我称之为显示对象或数据对象的DO)与“实体”的关系几乎是一对一的关系。 (我称之为模型对象的MO)。大多数交互者操纵一种类型的实体,并且它们具有一个MO-DO映射器。如果交互操作员处理多个用例,我通常会对不同的用例使用相同的DO。
BUT
我也有一些模块使用不同的DO用于不同的用例,虽然它们与同一个实体有关,而且我有一些DO结合了几个实体的信息,让我们说比如我需要用户将其添加到'由'编辑的名称我使用相同的DO来结合发布和用户实体。
我认为VIPER'想要'每个模块有一个交互器,这种类型会强制您拥有多个用例(相关),但如果您想使用不同的项目(我的DO)或只有一个,则由您决定。
作为清洁架构的纯粹主义者,您应该为每个用例提供不同的交互者,不同的请求和不同的响应。
所以,当我开始时,这取决于,重要的是要画出'正确的边界,如果它是你使用的一个或十个项目并不重要。