【问题标题】:VIPER - Should the Interactor return only the necessary information?VIPER - Interactor 是否应该只返回必要的信息?
【发布时间】:2015-05-17 06:01:30
【问题描述】:

VIPER 设计模式中,交互器应该返回可能被多个演示者操作使用的所有信息,还是应该为每个操作提供一个单独的结构?

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

现在假设当用户选择地图中的一个注释时,应显示一个标注气泡,其中包含更多详细信息,例如地点名称和带有颜色的圆圈。

现在我应该创建一个 RetrievePlaceCalloutInteractor,它只返回一个地方的信息,而不是多个地方的信息列表(对吗?或者我应该在两种情况下都只有一个交互器?)。

这个 RetrievePlaceCalloutInteractor 是否应该返回一个 PlaceCalloutItem,其中仅包含该地点的名称和颜色(无坐标),或者我是否应该有一个带有坐标、颜色和名称的 PlaceItem,它将由 RetrievePlaceCalloutInteractor 和 PlaceInteractor 返回,以及演示者会使用它来构造 CalloutStruct 还是 MKAnnotations 列表?

谢谢。

【问题讨论】:

  • 嗨罗德里戈,只是一个简短的评论。听起来您应该在此特定场景中简单地将名称包含在 PlaceItem 对象中。在我对 VIPER 的检查中,我通常每个屏幕都有一个交互器,它具有视图可能需要的所有信息的方法。除非它是多个屏幕所需的一组通用业务逻辑,否则我要么在视图中引用两个(或更多)交互器,要么让特定的视图交互器确定要向哪些其他交互器获取信息。我还没有确定哪种方法最好。

标签: ios design-patterns architecture software-design


【解决方案1】:

VIPER 是一种模式,不是很正式的模式,不是宗教或完整的应用架构。对我而言,VIPER 帮助我更多地考虑了更清洁的架构,但在此过程中,我必须做出更适合我的特定场景的决策,而不关心 VIPER,而是关注清洁架构。因此,根据我的经验和观点,您问题的答案是“取决于”。

在我的例子中,大多数“项目”(我从显示对象或数据对象中将它们称为 DO)与“实体”(我从模型对象中将它们称为 MO)几乎是一对一的关系。大多数交互者操作一种类型的实体,并且他们有一个 MO-DO 映射器。如果交互器处理多个用例,我通常将相同的 DO 用于不同的用例。

但是

我也有一些模块使用不同的 DO 用于不同的用例,虽然它们与同一个实体有关,而且我也有一些 DO 结合了几个实体的信息,比如说我需要用户名来添加它要“编辑”博客文章,我使用相同的 DO 来组合 PostUser 实体。

我认为 VIPER“希望”每个模块有一个交互器,这会迫使您在其中使用多个(相关的)用例,但是如果您想使用不同的项目(我的 DO)或只使用一个,则取决于您.

作为一个干净架构的纯粹主义者,您应该为每个用例拥有不同的交互器、不同的请求和不同的响应。

所以,正如我开始的那样,这取决于,重要的是正确地“划定”边界,你使用一个或十个项目并不重要。

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 2011-02-16
    • 2021-08-27
    • 2015-07-06
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多