This app is part of a technical interview, but it can be used as a seed project.
Feature | Library | Version |
---|---|---|
Dependency Injection (IoC) | Dagger Hilt | 2.40 |
HTTP Requests | Retrofit | 2.9.0 |
Async/Reactivity | Coroutines + Flow | 1.5.0 |
Unit Tests | JUnit | 4.13.2 |
Mocking library | MockK | 1.11.10 |
The source code is divided into 3 blocks, data, domain and features. The first one contains code that has access to the sources of data. domain defines business logic, entities and use cases. And the last of them, presentation, has the UI layer with activities/fragments, viewmodels, etc.
This project has been developed following the guidelines of clean code and clean architecture, from Robert C. Martin.
It contains the datasources, repository implementations and API models. Datasources are in charge of requesting the data to API services, local databases or any other source of data. Repositories consume data from the datasources and transform it into domain entities.
It contains the use cases, domain entities and repositories specs. Use cases are a single method classes that access to one or more repositories to get the data to the presentation layer. Repositories are specified in this layer to avoid having dependencies to the data layer.
It contains the viewmodels and views (activities, fragments...). The ViewModel exposes an observable model and methods that the _view: will subscribe or call to interact with the business logic.
- Use Navigation Component
- Migrate from Koin to Dagger Hilt (In fact, Koin is not a DI library, but a service locator)
- UI + Instrumented Tests
- Adapters instrumented tests
- Activities Espresso tests
- Migrate UI to Jetpack Compose
- TBD
- TBD