This project was developed by using JetPack Compose. Could be used as template project.
To implement this project was used a multi modules architecture based on the "Clean Architecture" principles. As sources of data used the https://dummyjson.com to getting dummy/fake JSON data to use as placeholder in prototype this template
- "ObjectBox" to local storing of details viewing history
- "Retrofit" to access external data server
- "Hilt" used as Dependency Management System
- "Glide" to download and view images
- "Kotlin serialization" to converting data to/from History DAO
The application includes the following modules and packages:
- App module
- Initialization of App Theme, Colors, Fonts
- Dependency Injection initialization
- Database core initialization
- Main Application Navigation and routing logic
- Core-UI Module
- Theme package (common settings colors, fonts, themes, functional extensions of Colors object)
- Common use widgets package (e.g "Alert widget")
- Domain Module
- Internal data entities
- Data interfaces
- Business logic interfaces
- Data Module
- Local storage on the ObjectBox
- DAO model definitions
- CRUD implementation
- mapping between DAO models and internal data presentation
- Remote storage based on Retrofit
- DTO model definition
- Defining and implementing an API to access the Content Management System
- mapping between DTO models and internal data presentation
- Local storage on the ObjectBox
- Feature Modules:
- Product List Screen
- Main list of products with support for Page Fill
- Product list element widget with product summary
- Product Details History Viewer Screen
- Screen of view a product details
- Product List Screen
Choosing to implement a multi modules based on the "Clean architecture" architecture allows a team members to independently develop new application functions simultaneously and independently. It also allows them to easily change the logic of data processing and change the libraries used to access local and remote storage.
Using "HILT" as a dependency management system allows you to significantly lower the threshold of entry of new team members into the project while retaining the power and capabilities of the "Dagger" dependency management system of the currently recommended Android developers documentation and If necessary, both dependency management systems can be used for more flexible and complex interactions between system components
The "MVVM" pattern was used to separate the business logic from the logic of presentation by means of which it is easy to change the presentation of data or business logic of its processing.