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 MVCS
(S
for 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 API
(like 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: fetchContacts
, 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 Service
, or NetworkProvider
layer or whatever on top of my MVC
architecture, or this layer should be integrated (injected) into existing MVC
layers e.g. Model
?
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.