【问题标题】:Routing in Clean Architecture清洁架构中的路由
【发布时间】:2019-06-13 13:30:06
【问题描述】:

我在 Swift 中使用 Clean Architecture。我对其中的路由表示怀疑。

考虑这种情况:在ViewController中按下按钮时需要按下屏幕

现在可能有两种情况:

  1. 我们需要将一些数据传递给另一个控制器:
    • 在这种情况下,我们将调用interactor->presenter->viewcontroller->router->push。
  2. 我们不需要将任何数据传递给另一个控制器,而不是经历整个循环:
    • 我们可以直接从视图控制器调用路由方法吗?这会破坏清洁架构吗?

【问题讨论】:

  • 这是一个很好的问题。
  • 这会破坏干净的架构 - 是的。层之间交互的结构不应依赖于它们之间传递的特定数据。

标签: ios swift xcode clean-architecture


【解决方案1】:

Ankit,我想指出的是,跨路由单元的所有数据事务都应该在业务逻辑派生的传播上启动,可选择有状态的。

交互器的存在是为了将来自实体层的输入/输出数据转换为演示者,使演示者独立于封装在实体层中的系统状态,因此更具可测试性。它适用于将实体特定的数据位传播到路由器中,路由器会继续将其转发到 view-presenter-interactor 的新堆栈。

演示者的存在是为了为视图提供有状态的界面。在不需要特定的数据转换并且省略了交互器的情况下,将事件从呈现器通过路由器传播到另一个视图-呈现器-交互器堆栈被认为是正常的。

但是,不正常的是从视图(在您的情况下为 UIViewController)到路由器的直接事件传播,因为它创建了导航场景的直接绑定,并且根本无法插入业务逻辑是机会主义的,因为演示者没有参与事务。

所以,我想说是的,它会破坏 Clean。从演示者或交互者传播到路由器。这甚至扩展到事件可以表示为 Void Swift 空元组值的情况,因此实际上不传播任何数据。

【讨论】:

    【解决方案2】:

    你不应该直接从 ViewController 调用路由器。

    决定导航到某个地方的责任由交互者承担。这是纯粹的业务逻辑。

    ViewController 不应该知道何时导航。 ViewController 告诉交互者:“按钮已被按下”,然后交互者告诉演示者“必须呈现这个场景”,最后演示者必须告诉 ViewController 他必须显示那个场景,它调用路由器来执行导航。

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 2014-06-22
      • 2021-06-17
      • 2021-02-12
      • 1970-01-01
      • 2017-04-14
      • 2019-04-24
      • 2019-04-17
      • 1970-01-01
      相关资源
      最近更新 更多