iPhone - viewController 和网络请求的架构

Posted

技术标签:

【中文标题】iPhone - viewController 和网络请求的架构【英文标题】:iPhone - Architecture for viewController and network requests 【发布时间】:2012-04-14 20:25:17 【问题描述】:

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

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

我的想法是这样的:

有一个名为NetworkManager 的层。 NetworkManager 是我所有网络服务调用的歌手。

对于需要持久化并且可以在列表中显示的数据,我会让网络管理员发出请求,将响应保存在我的本地核心数据数据库中,并让我的 UIViewController 使用 @987654324 收听该数据@。

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

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

1. 在 ViewControllers 和 NetworkManager 之间有另一个层。 我们称之为MediatorMediator 从 networkManager 获取字典(JSON)请求,根据应用程序逻辑决定是否需要对其执行其他操作,然后发布带有适当名称和数据的通知。如果 mediator 保存了发出请求的 UIViewController,它可以直接将响应委托给他,而不是发布通知。

流程是这样的:

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,发出带有块的网络请求。这意味着不是 Mediator 在 MyUiViewController 之前拦截响应,而是让 MyUiViewController 使用块来处理响应,因为他是发出它的那个。

Pros:
Simple and quick to code
Easy to understand

Cons:
Coupling of network code inside your controllers

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

【问题讨论】:

【参考方案1】:

你已经找到最好的方法了吗?

这是我通常做的,

有一个不是 Singleton 的 NetworkManager。使用方法 OnSuccess,OnError 定义协议。在启动网络连接的 ViewController 中实现这一点。在 NetworkManager 上设置委托,在执行异步请求时调用委托。

使用委托而不是块,因为它易于维护。

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

【讨论】:

【参考方案2】:

我推荐选项 2 以及您为选项 1 列出的一些内容。在我的应用程序中,我倾向于同时运行两种不同的操作模式。

自动下载: 应用程序基本数据被下载并直接保存到数据库中。每次应用程序激活时都会启动它。当每个请求完成时,会为可能需要了解新数据的任何可见视图控制器发送一个 NSNotification。

例如,如果我保存玩家数据,我会发送类似“PlayerDataUpdated”的通知。当视图控制器可见时,它会监听通知。当它不可见时,它不会监听通知,因为在 viewWillAppear 期间会发现对数据库的任何更改。

用户发起的下载: 对于用户发起的网络请求,例如拉取刷新,您应该从需要更新数据的视图控制器调用 NetworkManager 上的相应方法。

【讨论】:

以上是关于iPhone - viewController 和网络请求的架构的主要内容,如果未能解决你的问题,请参考以下文章

关于使用多态显示 iPhone/iPad ViewControllers

我应该在哪里创建和呈现整个 iPhone 应用程序中使用的模态 ViewController

iPhone - 设计我自己的 viewController 过渡

如何在 iPhone sdk 中从 ViewController 绘制一个矩形

iPad SplitViewController - 使用 iPhone 故事板 ViewController

iPhone 结构 ViewController