View controllers are the foundation of internal app structure so some app has at least one view controller and other apps have several. Each view controller manages some portion of your app user interface as well as the interaction between that interface and underlying data. It enables you to put your code in logical places. Using the coordinator pattern in iOS apps lets you remove the job of app navigation form our view controllers and helping make them more manageable and more reusable while allowing us to adjust our app flow whenever we need. View controllers work best when it stands alone in your app, unknowing of its position in your app flow or even the part of such flow in the first place. It doesn’t only make your code easier to test it also allows you to re-use view controllers elsewhere in your app more easily. So before we see into the solution let’s have a look at problems we face if we do it in a standard way. Mostly mobile app builder controls the flow of screens in their apps in their view components. Even Apple and Google sample code helps to promote this simple solution. So the given approach may be fine until you want to reuse one of those views in a different context. So with the help of this approach, the views need to know the context in which they are used, and which makes them less reusable and extremely large and hard to manage.
Co-ordinator pattern is nothing but one of the most accessible solutions for this problem is to remove the responsibility of managing flows of screens from the view components and move it to separates the higher level layer. So the given pattern named as coordinator pattern. We have started to use the co-ordinator pattern for our apps, and it has also allowed us to create the reusable view which is easier to test and also help to enable us to extract the view model and view initialization to separate layer. The creation and configuration of those components can be complex and if putting this in logic in other view or view models to makes them coupled. A coordinator can be called from different components. So if you are using MVC design architecture, you will probably trigger the coordinator in your view components, and if you are using MVVM, you can call either from the views or the view models. In coordinator, pattern it doesn’t necessarily mean you have to use the MVMM architecture for your iOS app development, but it fits nicely with the idea of separating concerns of your components. So the combination of MVMM and the coordinator pattern is well known under the name of MVVM-C.
Coordinators to the next level
Coordinators share a lot of code which is mostly handling the routing of screens, and that is when we started to introduce a new terminology router and coordinator.
A router is an object which knows how to navigate under different circumstances in new screens and abstracts platform specific navigation code away if we take iOS as an example. Then the router will know how to push views to a navigation controller or how to present views modally.
A coordinator is more than a router which routes between screens, and it is also responsible for deciding which route to take after a specific action happened it creates and configures views and view model know how to connect the routes to create a flow. Sometimes your coordinator is also a perfect place to inject dependencies into your components.
Concept of Combining Router and a Coordinator
Combining the concept of Router and a Coordinator you don’t have to repeat the routing code again and again. That is why our default co-ordinators implementation provides you routing codes which are needed along with that we should be able to replace and inject different coordinators for a different use of cases. Framework abstracts the routing responsibility away and then provides you frame for implementing your coordinators which is useful for performing MVVM-Where Rx coordinator proposes you to trigger the routing from you, view models which help you to remove redundant communication between view and view model. For creating a type-safe interface, we use routes for defining the navigation paths from one view to another. The coordinators then are handling those routes and perform the actual navigation to this scene. Therefore introducing all these new components may seem like an overhead but you merge all the transitions, routes and coordination to create combinations and for making it super simple to add new routes and new transitions without changing your logic in your view or view models.
So for wrapping up the coordinator pattern helps greatly to remove more responsibilities from view components and help to write more reusable and better testable view. So by adopting the pattern for our cases and writing our framework we come to and conclusion that it fits nice in iPhone app builder architecture.
Panacea is an ISO certified software company experts in USA, Kuwait, Australia, India and UK providing all solutions like web design, web development, mobile app development & SEO Services