gpt4 book ai didi

iPhone - viewController 和网络请求的架构

转载 作者:技术小花猫 更新时间:2023-10-29 11:07:42 25 4
gpt4 key购买 nike

所以,我有两种类型的数据,一些需要持久化,一些不需要。

我正在考虑将我所有与网络相关的代码放在哪里,在我的 UIViewController 中,所有网络请求从哪里开始,或者在另一层。

我的想法是:

有一个名为 NetworkManager 的层。NetworkManager 负责我所有的网络服务调用。

对于需要持久化并可以在列表中呈现的数据,我会让网络管理器发出请求,将响应保存在我的本地核心数据数据库中,并让我的 UIViewController 监听该数据使用 FetchResultsController

但是,还有许多其他类型的请求。例如:登录请求、用户信息请求、friendsNearBy 等等……有些不必在我的数据库中持久化,有些不适合 FRC 架构。

对于这些类型的请求,据我所知,有两种处理方式:

1. 有另一个层将 ViewController 和 NetworkManager 分开。 我们称它为 MediatorMediator 从 networkManager 获取字典 (JSON) 请求,根据应用程序逻辑决定是否需要对其进行任何其他处理,然后发布具有适当名称和数据的通知。如果中介保存了发出请求的 UIViewController,它可以直接将响应委托(delegate)给他而不是发布通知。

流程是这样的:

MyUiViewController - > Mediator -> NetworkManger->Mediator-> PostNotification (or directly back to MyUiViewController)

Pros:
Decoupling
Nice structure and separation of concerns

Cons:
Harder to code
Sometimes harder to understand and debug.

2. 没有这个 3 层架构,而是有 MyUiViewControllers,使用 block 发出网络请求。这意味着不是 Mediator 在 MyUiViewController 之前拦截响应,而是让 MyUiViewController 使用 block 处理响应,因为他是发出它的那个。

Pros:
Simple and quick to code
Easy to understand

Cons:
Coupling of network code inside your controllers

我希望从人们的经验中得到最好的建议和评论,或者其他/更好的方法。

最佳答案

你知道什么是最好的方法了吗?

这是我通常做的,

有一个不是单例的 NetworkManager。使用方法 OnSuccess,OnError 定义一个协议(protocol)。在启动网络连接的 ViewController 中实现它。在 NetworkManager 上设置委托(delegate),让委托(delegate)在执行异步请求时被调用。

使用委托(delegate)代替 block ,因为它易于维护。

这可能不是最佳解决方案,但希望它能给您一些指导。

关于iPhone - viewController 和网络请求的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9955041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com