Develop new project in Swift using RxSwift, Moya with MVVM-C Design pattern. I develop this project with TDD, Every view model has unit testing code coverage up to 90%, DevOps with Gitlab-CI.
**MVVMC Design Pattern**
- Using RxSwift and RxCocoa for data binding.
- Data Binding: using BehaviorRelay for data binding, headlinesBR & isLoadingBR.
- Dependency Injection: switching mock APIManager environment(for unit testing) or real APIManager environment.
---
**API Layer**
- Moya/RxSwift: Using moya mock data for Unit Testing.
- ServerConfig: The base endpoint and other api paths.
- APIBaseTargetType: Base TargetType for Moya.
- APIResponseModel: Api response Model.
- APINewsProvider: The base of NewsAPI.
- HeadlinesAPI: The Api for getting Headlines info.
*reference*
*https://medium.com/@davidlin_98861/華麗的-network-layer-c5c664dcca47*
---
**Coordinator**
- AppCoordinator: using in AppDelegate for setting RootViewController in this case ListViewController.
- ListCoordinator: setting the Dependency Injection of viewModel for ListViewController, and handle navigation push.
- DetailCoordinator:
*reference*
*https://github.com/onmyway133/blog/issues/106*
---
**DataCenter**
- using Realm for DB.
- Saving headline to Realm database.
- retrieve headline from Realm database.
---
**Unit Testing**
- Project Code Coverage average: 53.5%
- ViewModel: Coverage average: 80% up (ListVM)
---
**Coding Style**
- using SwiftLint
---