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)
我希望从人们的经验或其他/更好的方式获得最佳建议和评论.
您已经找到最好的方法了吗?
这就是我通常做的事情
有一个不是单例的 NetworkManager。使用方法 OnSuccess、OnError 定义协议。在启动网络连接的 ViewController 中实现这一点。在NetworkManager上设置委托,并让委托在执行异步请求时被调用。
使用委托而不是块,因为它易于维护。
这可能不是最好的解决方案,但希望它能为您提供一些指导。
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |