Make your UITableView & UICollectionView lighter with MVVM
Sometimes, working with both UITableView and UICollectionView ending up with bloated views or even controllers. Things more complicated when we need to change our datatype dynamically. Lets say we have two section like below;
Below screen there are two separated section that means we need two seperate model and this two models configured accordinly. If I select “Orders” I have to prepare my cell in table view with Order model. In contrast when I select “Completed Orders” I have to prepare my cell in tableview with related model as well.
I have created two different model for this situation first one is for active order and second one is for completed orders like so; For this kind of situtations it would more benifical to seperate data sources. We should not re-use our data source files into same application. Instead we should create our data source per table&collection views. By doing so, we can test our view models, models and even our data sources!
And my ViewModels has very simple job right now.
Our data sources only implementing UITableViewDataSource or UICollectionViewDataSource
And finally, our view controller does only one thing; mediating between views and view models! Generally we should keep our view controller light. This way if we can make unit test our view models that increase our test coverage and our app robutness and doing a little SRP(Single Responsibility Principle) rule.
When make thins red-green-refactor criteria in this approach we can test almost every business logic. We can test our model, view model and even data source like I said before;