1

我发现这篇文章如何构建毒蛇模块。对我来说有一件事仍然存在疑问,我不知道哪个元素负责处理响应,或者该处理是否应该由 2 个或更多 V、I、P、E 或 R 元素部分处理。

所以我们通常在 VIPER 循环中有下一个队列

  1. ViewController 请求演示者在 viewDidLoad 上做 smth,例如在后台下载 smth。
  2. Presenter 请求 Interactor func 做一些辅助工作,例如调用某些服务
  3. 服务执行一些 NSURLSession 请求并回调交互器。

如果您熟悉 VIPER,那么您可以看到很明显的队列我跳过了一些协议和 VIPER 元素扩展。

在上面的链接中,我们有一个函数:

static func getPosts(completionHandler: @escaping ([Post]?, Error?) -> Void) {

如您所见,它不会在完成时返回原始响应,而是对数据和错误进行一些检查。

我的问题是这合法吗?我认为违反了单一职责或至少违反了 VIPER。

检查错误的最佳位置是什么,将一些数据构建器注入到一个人发帖的服务函数中是否更好。

或者,也许我们需要用原始响应回电,并允许演示者对错误、数据空等进行所有需要的检查。请不要阻止这个问题,因为这至少对于查看您的评论很重要。

4

1 回答 1

2

一件事对我来说仍然存在疑问,我不知道哪个元素负责处理响应。

  1. VIPER 只讲述单个模块所需的部件。它不会强迫您Interactor直接依赖Storage/ Cache/ NetworkClient。您还可以拥有其他实体,例如 Repository,这样您的依赖项就会变成Interactor-> Repository-> NetworkClient
  2. NetworkClient可以传递数据或错误都很好。Result<[Post], NetworkClientError>但是,在这种情况下提供更快捷的方式。

在这种情况下,Interactor处理与网络相关的错误很好。例如Interactor,可以决定重试几次,以防错误与互联网连接有关。

于 2020-11-30T23:13:39.920 回答