【问题标题】:iOS VIPER - Should a custom alert (similar to UIAlertView) be a different module?iOS VIPER - 自定义警报(类似于 UIAlertView)应该是不同的模块吗?
【发布时间】:2017-12-16 03:05:56
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: ios architecture viper-architecture


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      相关资源
      最近更新 更多