【问题标题】:Where should VIPER modules be initiated in UIKit project在 UIKit 项目中应该在哪里启动 VIPER 模块
【发布时间】:2022-01-01 12:46:58
【问题描述】:

我在互联网上阅读了很多文章,其中人们解释了每一层的职责,并且路由器或某些文章中的“构造器”应该创建整个 VIPER 模块。但是没有人不解释在哪里创建它们以及如何创建它们(它们中的大多数使用返回视图控制器的类函数,但我应该在哪里使用这个返回值?)。在我的情况下,我有初始的 UITabBarViewController,我的一个建议是在 viewDidLoad 中调用一个类函数,但我应该再次使用这个返回值(一些视图控制器)。我完全感到困惑,非常感谢您的帮助。提前致谢!

【问题讨论】:

    标签: swift uikit viper-architecture


    【解决方案1】:

    VIPER 最好被视为自治区域,在每个区域的立面后面运行自己的内部事务。内部事务的开始和结束(例如,V[iew] 区域内的 UIKit 实例)通过 V 区域的外观作为消息传递的副作用进行管理。 V区外立面的信息来源于

    1. 如果开始生命行为与导航相关(很可能),则从 R[outer] 区域。具体到您的问题,在从某个先前的屏幕导航到新屏幕时,一个 UITabBarViewController 实例与另一个 UITabBarViewController 实例通常是源自 R 区域的导航的副作用。
    2. 如果开始生命行为与从 V、I、P、E 或 R 区域之一中穿过 P 区域的级联分支有关,则来自 P[重新输入] 区域。例如,实体的后端处理可能会导致 UI 交互变化被通知到 V 区的门面,进而运行 V 区门面后面的 V 区内的内部事务,例如实例化一个 UIKit 对象.

    具体到您更狭义的问题,即什么实例化 UITabBarViewController 以及什么保留 viewDidLoad 的返回值,这将是 V 区域的外观,作为管理 V 区域内对象实例生命周期内部事务的一部分,作为V 区外观对应用程序当前累积状态的感知(通过区域间消息,主要来自 P 区,很少直接来自 R 区),这意味着 V 区作为其内部事务管理的 UI 的当前累积状态。

    最好记住:如果我要从 V 区删除所有适用于 iPhone/iPad 的 iOS 以代替,例如,放入完全不同的 MacOS 操作(或您选择的语言支持的任何其他 UI,哪个最有可能是 Swift 或 Objective-C)?如果 V 区域的设计/架构正确,所有 UI 细节都位于 V 区域的外观后面,并且所有 I、P、E 和 R 区域中的所有非 UI 状态的应用程序的东西,那么来自 iPhone/ 的端口由于 V 区的独立性,iPad 到 MacOS 会更容易,因为只改变 V 区立面后面的 V 区内的胆量。

    这一切都提出了一个问题,即如何设计立面以将 V 区与其他 I、P、E 和 R 区之间经过深思熟虑的隔离。通常,E[ntities] 区域包含出现在区域各自外观之间的区域间消息中的参数,因此实体通常是在应用程序中流动的相当明显的数据,在 Apple 框架中没有直接表示,而是有理由独立存在关于 Apple 框架的 UI 操作的内部结构。除了实体之外,每个区域的立面的 OO 设计(尤其是 V 区立面的隐藏 Apple-speak 任务)是您 100% 的选择,除了 V 区不应有一点 Apple 框架内容立面呈现出 I、P、E 和 R 区域的区域间。至少,V 区的外观可以是一个巨大的类,一个带有大量方法/消息的单例实例;这样一个整体的外观有一些简单和美丽。但是现代的 OO 品味会将这个单体分解为广泛的以应用程序为中心(与以 Apple 框架为中心或什至以 UI 操作为中心相反)的主题,每个主题都有一个单例实例。 V区立面的内容不应该(在主题或消息中)说出诸如“弹出某某对话框”之类的残酷细节,而是“通知用户某某”这样可能是在 iPad 上弹出一个对话框,在 iPad 上更新大屏幕的一个区域,在 MacOS 上完全不同,所有这些都是 V 区域内的内部事务,其余应用程序(的区域)并不真正关心关于在各种操作系统/平台上制定了哪些 UI Gizmo。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2010-12-06
      相关资源
      最近更新 更多