iPhone - viewController和网络请求的体系结构

Ida*_*dan 10 iphone model-view-controller networking objective-c ios

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

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

我的想法是:

有一个叫做的图层NetworkManager. NetworkManager是我所有网络服务电话的歌手.

对于需要持久且可以在列表中显示的数据,我会让网络管理员发出请求,将响应保存在我的本地核心数据DB中,然后使用我的UIViewController数据来监听FetchResultsController.

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

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

1.使用另一个层来分隔ViewControllers和NetworkManager.我们称之为Mediator.该Mediator如果有别的需要与它做,然后发布适当的名称和数据的通知会从NetworkManager的字典(JSON)的请求,决定根据应用程序的逻辑.如果中介保存发出请求的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.
Run Code Online (Sandbox Code Playgroud)

2.没有这种3层架构,而是拥有MyUiViewControllers,用块发出网络请求.意思是代替Mediator拦截MyUiViewController之前的响应,让MyUiViewController使用块处理响应,因为他是发布它的人.

Pros:
Simple and quick to code
Easy to understand

Cons:
Coupling of network code inside your controllers
Run Code Online (Sandbox Code Playgroud)

我希望从人们的经验或其他/更好的方式获得最佳建议和评论.

sur*_*esh 1

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

这就是我通常做的事情

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

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

这可能不是最好的解决方案,但希望它能为您提供一些指导。