The architecture used is based on MVP (Model View Presenter).
- Model: The repository uses one or more controllers (Retrofit client, DB Dao, etc) to manage the application data and business logic.
- View: Doesn't manage any business logic, just the UI widgets and the navigation between screens.
- Presenter: It acts as a bridge between the View and the Model. Could listen to Model changes to update the View.
Since the app is written entirely in Kotlin, I decided to use the following libraries:
- Kotlin Coroutines to handle the background work.
- Koin to handle the Dependency Injection.
Besides, the following libraries were used: