I'm an iOS developer with some experience and this question is really interesting to me. I saw a lot of different resources and materials on this topic, but nevertheless I'm still confused. What is the best architecture for an iOS networked application? I mean basic abstract framework, patterns, which will fit every networking application whether it is a small app which only have a few server requests or a complex REST client. Apple recommends to use
MVC as a basic architectural approach for all iOS applications, but neither
MVC nor the more modern
MVVM patterns explain where to put network logic code and how to organize it in general.
Do I need to develop something like
Service) and in this
Service layer put all
API requests and other networking logic, which in perspective may be really complex? After doing some research I found two basic approaches for this. Here it was recommended to create a separate class for every network request to web-service
LoginRequest class or
PostCommentRequest class and so on) which all inherits from the base request abstract class
AbstractBaseRequest and in addition to create some global network manager which encapsulates common networking code and other preferences (it may be
AFNetworking customisation or
RestKit tuning, if the we have complex object mappings and persistence, or even an own network communication implementation with standard API). But this approach seems an overhead for me. Another approach is to have some singleton
API dispatcher or manager class as in the first approach, but not to create classes for every request and instead to encapsulate every request as an instance public method of this manager class like:
loginUser methods, etc. So, what is the best and correct way? Are there other interesting approaches I don't know yet?
And should I create another layer for all this networking stuff like
NetworkProvider layer or whatever on top of my
MVC architecture, or this layer should be integrated (injected) into existing
MVC layers e.g.
I know there exists beautiful approaches, or how then such mobile monsters like Facebook client or LinkedIn client deal with exponentially growing complexity of networking logic?
I know there are no exact and formal answer to the problem. The goal of this question is to collect the most interesting approaches from experienced iOS developers. The best suggested approach will be marked as accepted and awarded with a reputation bounty, others will be upvoted. It is mostly a theoretical and research question. I want to understand basic, abstract and correct architectural approach for networking applications in iOS. I hope for detailed explanation from experienced developers.