【问题标题】:CleanSwift - Can a presenter directly call router function?CleanSwift - 演示者可以直接调用路由器功能吗?
【发布时间】:2018-03-20 05:56:16
【问题描述】:

我正在研究 CleanSwift 架构。我在图中看到演示者和关联的场景路由器之间没有直接通信,

但通常在某些情况下,演示者只需要路由到另一个视图控制器。我想知道它是否允许演示者直接调用路由器 routeToOtherView() 函数,而不是在视图控制器中调用一个额外的函数来简单地重定向。

【问题讨论】:

  • 这通常会破坏数据流,因为有时您需要从控制器传递一些数据到 segue 并且演示者无法从 UI 请求数据
  • 谢谢@tereks,但是如果没有数据怎么办,我们可以在路由器中使用两种方法,一种用于数据,一种用于无数据。当没有数据时,我们从presenter调用,当需要数据时,我们通过控制器调用。 ??你有什么建议?
  • 恕我直言,路由器的存储和调用位置没有太大区别,我们有 VIPER 和演示者持有路由器,所以为什么你不能在代码中使用一些 VIPER。更重要的是为整个项目和个人利益保持相同的架构

标签: ios swift design-patterns clean-architecture


【解决方案1】:

我还在几个项目中使用过 CleanSwift。我喜欢这个架构的地方在于它可以在单向流中工作。在这个流程中,ViewControllerRouterInteractorPresenter 一起工作。 单向流让我们很容易找到错误。

让我们用一个场景来理解这一点。假设您有一个 Button,然后单击要从 ViewController1 移动到 ViewController2 的按钮。如果你写的是 ViewController3 而不是 ViewController2,现在它在按钮点击时显示 ViewController3。要解决此错误,您必须查看路由机制。并且你知道路由机制存在于 ViewController1 中,所以要解决它,你应该转到 ViewController1 并找到负责路由的函数并解决错误。

如果您在 Presenter 中移动路由,则您正在破坏流程,因为某些情况下只需要从一个 Controller 移动到另一个。此外,架构将取决于您,因为您必须记住您是否在 PresenterController 中添加了路由机制。它还会影响协作环境,您的对手必须在其中搜索路由机制。如果您遵守上述情况,也需要时间来解决问题。

所以最好不要破坏流程。花更多的钱让它变得珍贵是好的。希望这个答案能有所帮助。

【讨论】:

  • 我的快乐@sazzad
猜你喜欢
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
相关资源
最近更新 更多