iOS VIPER - 自定义警报(类似于UIAlertView)是否应该是另一个模块?

时间:2017-07-11 21:40:49

标签: ios architecture viper-architecture

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

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

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

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

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

我应该在alertView.alpha = 1时显示containerView.alpha = 0的警报视图,并在点击警报视图上的关闭按钮时将其反转,还是应该全部转到VIPER,创建新模块?

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 如果将设计更改为不弹出模态对话框,而是在某些非模态视图(窗格)中同时/非模态活动的其他视图中显示警报,该怎么办?那么这真的对 V I P R 区域之间的应用域数据/概念的区域间应用域表示产生了全面的影响。 VIPER(在 Clean Architecture 思想流派中同样有效)就是要保持隔离,以便隔离的 x 可以被 y 替换,而不会改变其他区域的任何非 x 和非 y 部分。
  2. 如果将应用移植到 MacOS 甚至 Android 会怎样?所有的应用域间消息/概念都不应该仅仅因为视图区域中的 UI 被换出并且路由器区域中的导航被修改了一些,因此也被换出。如果 Apple-think 在纯应用程序域间消息/数据/概念中的任何位置,那么 VIPER 在区域之间的应用程序中存在不足。这通常意味着视图区域中的 UI 隔离具有某种形式的外观,可以将纯粹的应用程序域数据/消息/概念传达给其他区域,可能是在视图模型中,也可能是根据当地口味作为实际的外观层。
  3. 如果其他区域对任何与视图区域(不明智地)认为是 UI 到 UI 的快捷方式相关的内容视而不见,该怎么办?其他区域的失明是否会导致故障、错误或缺乏有用的功能?如果是这样,那么缺乏纯粹应用域数据/概念的区域间消息传递的 UI 到 UI 捷径会使一些以应用程序域为中心(而不是 UI 内部事务为中心)的一个或多个其他 IPR 区域匮乏) 区域间信息流。