Swift 使用 VIPER 和服务处理错误责任
Swift handling error responsibilities using VIPER and services
我找到了 article 如何构建 viper 模块。有一件事我仍然有疑问,我不知道哪个元素负责处理响应,或者该处理是否应该由 2 个或更多 V、I、P、E 或 R 元素部分处理。
所以我们通常在 VIPER 循环中有下一个队列
- ViewController 请求演示者在 viewDidLoad 上做 smth 例如在后台下载 smth。
- Presenter 请求 Interactor func 做一些辅助工作,例如调用某些服务
- 服务执行一些 NSURLSession 请求并回调 Interactor。
如果你熟悉 VIPER,你可以看到这是明显的队列我跳过了一些协议和 VIPER 元素扩展。
在上面的 link 中我们有一个 func:
static func getPosts(completionHandler: @escaping ([Post]?, Error?) -> Void) {
如您所见,它不会 return 完成时的原始响应,而是对数据和错误进行一些检查。
我的问题是这样合法吗?我认为这违反了单一职责或至少违反了 VIPER。
检查错误的最佳位置是什么,将一些数据生成器注入服务功能会更好吗 post。
或者我们可能需要使用原始响应进行回调,并允许演示者对错误、数据是否为空等进行所有必要的检查。请不要阻止这个问题,因为这至少对于查看您的评论很重要。
One thing is still under question for me that I don't know which element is responsible for handling response.
- VIPER 只说明单个模块所需的部分。它不会强制您的
Interactor
直接依赖于 Storage
/Cache
/NetworkClient
。您还可以拥有其他实体,例如 Repository,这样您的依赖关系就会变得像 Interactor
-> Repository
-> NetworkClient
.
NetworkClient
可以传递数据或错误都很好。然而,在这种情况下提供 Result<[Post], NetworkClientError>
会更快捷。
在这种情况下,Interactor
可以处理与网络相关的错误。例如。 Interactor
如果错误与互联网连接有关,可以决定重试几次。
我找到了 article 如何构建 viper 模块。有一件事我仍然有疑问,我不知道哪个元素负责处理响应,或者该处理是否应该由 2 个或更多 V、I、P、E 或 R 元素部分处理。
所以我们通常在 VIPER 循环中有下一个队列
- ViewController 请求演示者在 viewDidLoad 上做 smth 例如在后台下载 smth。
- Presenter 请求 Interactor func 做一些辅助工作,例如调用某些服务
- 服务执行一些 NSURLSession 请求并回调 Interactor。
如果你熟悉 VIPER,你可以看到这是明显的队列我跳过了一些协议和 VIPER 元素扩展。
在上面的 link 中我们有一个 func:
static func getPosts(completionHandler: @escaping ([Post]?, Error?) -> Void) {
如您所见,它不会 return 完成时的原始响应,而是对数据和错误进行一些检查。
我的问题是这样合法吗?我认为这违反了单一职责或至少违反了 VIPER。
检查错误的最佳位置是什么,将一些数据生成器注入服务功能会更好吗 post。
或者我们可能需要使用原始响应进行回调,并允许演示者对错误、数据是否为空等进行所有必要的检查。请不要阻止这个问题,因为这至少对于查看您的评论很重要。
One thing is still under question for me that I don't know which element is responsible for handling response.
- VIPER 只说明单个模块所需的部分。它不会强制您的
Interactor
直接依赖于Storage
/Cache
/NetworkClient
。您还可以拥有其他实体,例如 Repository,这样您的依赖关系就会变得像Interactor
->Repository
->NetworkClient
. NetworkClient
可以传递数据或错误都很好。然而,在这种情况下提供Result<[Post], NetworkClientError>
会更快捷。
在这种情况下,Interactor
可以处理与网络相关的错误。例如。 Interactor
如果错误与互联网连接有关,可以决定重试几次。