我有两种类型的数据,一些需要持久化,一些不需要。
我正在考虑在哪里放置所有与网络相关的代码,是放在我的UIViewControllers中,从那里开始所有的网络请求,还是放在另一层中。
我想到的是这样的:
有一个名为NetworkManager
的层。
NetworkManager
是所有Web服务调用的单例。
对于需要持久化并且可以在列表中显示的数据,我将让网络管理器发出请求,在本地Core Data数据库中保存响应,并使用FetchResultsController
让我的UIViewController
监听该数据。
但是,还有许多其他类型的请求。例如:登录请求、用户信息请求、附近的朋友等等...有些不需要在我的数据库中持久化,有些不适合FRC架构。
对于这些类型的请求,据我所见,有两种处理方法:
1. 有另一个层,它在视图控制器和网络管理器之间分隔。
让我们称其为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.
2. 不使用三层架构,而是直接在MyUiViewControllers中使用块发出网络请求。这意味着不需要中介拦截响应,而是让MyUiViewController使用块来处理响应,因为他是发出请求的人。
Pros:
Simple and quick to code
Easy to understand
Cons:
Coupling of network code inside your controllers
我希望从人们的经验中获得建议和评论,或者其他更好的做法。