This Application is build on a Multi modules using MVVM, Clean Architecture, MVI design pattrens
The Approach to write this software is pretty much in an isolated way. Below are the brief description of the modules in the software
- Koin for DI
- Jetpack Architecture components
- Kotlin DSL for Gradle dependencies
This is the Gateway to the whole application containing DI Initialization and in our case it contain MainActivity to host the application. On top of that this module have all the dependency which are present in our application
- Initializing Dependency Injection
- Hosting the Application Root
This module kept all the use cases belong to the application, on top of that this is UI agnostic module.Having all the business information of the app. This is utilizing repository module in order to get the business and populate their respective DTOS
- To keep the business in a separate module agnostic of UI
In this module common classes are kept to provide support to the other modules
- Base classes for Fragments & Activities
- Application Common classes like (Styles,colors,Extensions)
- This module don't have any dependency from the project
This is providing the binding capabilities to the UI layer in order to show the data. This is kind of the bridge between Repositories and business module with out having cyclic dependency.This module dont have any dependency from the application
- Displaying the Actual data to the UI layer
This module is on the bottom layer of the project. Dealing with repository $ DataSource to get the data from the Network API client. And it can access the DTOS & common module
- Dealing with the Retrofit client to get the data
In this module we are presenting the applications main functionality where we are showcasing the github search list and its detail. This module have dependency on business, common, repositories
- Display repos details and the list of searched repos
In this module the repositories of all the application is embedded
- populating business module
Gradle’s Kotlin DSL is an alternative syntax to the Groovy DSL with an enhanced editing experience.
A special module within the project to manage dependencies and whatnot.