3

我有一个模块,例如模块 A,在完成一些工作并单击 viewControllerA 的按钮后,我应该收到一个自定义“警报”,表明我尝试的请求成功。“警报”应该有一个关闭按钮,让用户关闭视图并返回到 viewControllerA。

所以,我认为有两种可能:

1)只需创建 UIView,其 UILabel 与约束和 UIButton 绑定,并在隐藏包含大多数子视图的当前容器视图时显示它。

2)为调用的结果创建一个模块,并通过线框(路由器)在 viewControllerA 的视图和警报视图之间导航。

所以,这是我的疑问。似乎按照 VIPER 的指导方针,我应该使用 (2) 并创建一个模块,以便导航由线框控制,但警报视图仅由一些标签和一个按钮组成。这里没有要处理的数据。因此,交互器在 ResultModule 中将毫无用处。

然后我应该只显示警报视图alertView.alpha = 1containerView.alpha = 0在单击警报视图上的关闭按钮时将其反转,还是应该全部使用 VIPER,创建一个新模块?

4

1 回答 1

0

我将礼貌地忽略 OP 将模块用作垂直切片以专注于 VIPER 的 VIPER 区域。关于 OP 的问题/主题的推理是基于区域的,而不是基于每个区域内的垂直切片。(是的,我知道近年来关于 VIPER 的教学/呈现方式存在不同的观点,但我将利​​用这个https://theswiftdev.com/the-ultimate-viper-architecture-tutorial对 VIPER 的原始更纯粹的定义,其中不是以模块为中心,而是以架构子系统为中心。)

  • 激活时,模态对话框会阻止路由器区域导航到不同的场景/视图。因此,如果作为私人事务的视图区域出于任何目的弹出任何类型的模式对话框,这会使路由器无法根据来自交互器的传入事件或应用程序中的其他一些非 UI 发起的状态更改来执行其导航工作. 路由器区域不应被另一个区域蒙蔽,因为它无法执行其导航任务。此外,view zone 作为一个纯粹的 UI 问题并没有做出显示警报的决定;底层操作系统或演示者区域正在执行某种限制性规则,这意味着视图区域不是按自己的意愿行事,而仅仅是其他木偶操纵者的木偶。
  • 无论警报的主题是什么,它几乎肯定会影响所有 IPR 区域中某处的应用程序域层(可能由在 IP 和/或 R 之间流动的 E 区域中的数据表示)。为了将导致警报的规则违规作为私人事项保留在视图区域内,应用程序域对规则违规的感知是盲目的(或者它通过 VIPER 的不太出色的接近违规来传达)。因此,必须让演示者区域知道导致警报的规则违规,因为该规则违规可能会在应用程序域中触发一组不同的规则执行行为,因为演示者区域实际上意识到“哦,我们”在那种情况下。那么这意味着我们需要这样做相反,直到这种情况消退。” 在这种情况下,这种不同的应用程序域行为可能会导致演示者区域执行区域间行为,例如,路由器的场景导航和交互者的数据存储检索/存储行为不同。因此,几乎可以肯定导致警报的规则违规具有应用程序域方面以及 Apple 认为的 UI 到 UI 在 VIPER 之前的时代(和 MVVM-C 之前的 MVVM-C 的 C = VIPER 的 R)。

像在 OP 中那样思考一个主题时,三个思维过程有助于构建一个人的思想:

  1. 如果将设计更改为不弹出模式对话框,而是在其他同时/非模式活动的视图中的某个非模式视图(窗格)中显示警报怎么办?那么这确实对 VIPR 区域中应用程序域数据/概念的区域间应用程序域表示具有全面的影响。VIPER(在清洁架构学派中有效)就是保持隔离,以便隔离的 x 可以被 y 替换,而不会更改其他区域的任何非 x 和非 y 部分。
  2. 如果该应用程序被移植到 MacOS 甚至 Android 上会怎样?所有应用程序域间消息传递/概念不应仅仅因为视图区域中的 UI 被换出并且路由器区域中的导航被修改了一些因此也被换出而改变了一个 iota。如果 Apple-think 位于纯应用程序域间消息传递/数据/概念中的任何位置,那么 VIPER 在区域之间的应用程序中存在的不足。这通常意味着视图区域中的 UI 隔离具有某种形式的外观,可以将纯粹的应用程序域数据/消息传递/概念传达给其他区域,可能在视图模型中,或者根据当地人的喜好作为实际的外观层。
  3. 如果其他区域对与视图区域(不明智地)认为是 UI 到 UI 的捷径相关的任何事情都视而不见怎么办?其他区域的失明是否会导致故障、错误或缺乏有用的功能?如果是这样,那么缺少纯应用程序域数据/概念的区域间消息传递的 UI 到 UI 快捷方式使某些以应用程序域为中心(而不是以 UI-internal-matters-centric ) 信息流区间。
于 2021-05-03T14:59:32.847 回答