Home | Detail | All Movie |
Search | Favoritee |
├── Display different movie category (Upcoming, Popular, Top Rated etc)
├── Display detail movie information (Rating, Runtime, Cast, Trailer etc)
├── Save & Delete favorite movie
├── Search movie
The architecture of this app is complies with each of 3 following points:
- Model-View-ViewModel (MVVM) by utilizing the ViewModel in this architecture, you can achieve a more modular, testable, and maintainable codebase, with improved separation of concerns and a clear distinction between UI and business logic/data operations.
- Modular app architecture enables the development of features in isolation, independent of other features. This approach offers benefits such as reusability, scalability, maintainability, reduced app size, and easier modification or replacement of specific features.
- Clean Architecture strictly emphasizes a clear separation of concerns through distinct architectural layers: Presentation/UI layer, Domain layer, and Data layer. This separation facilitates writing tests without dependencies on external frameworks or UI components, enhancing testability.
Above graph shows the app modular structure.
- The
:app
module has a direct dependency on the:core
and:common-ui
module. Additionally,:app
indirectly depends on the:feature
module :feature
modules depends on:core
,:common-ui
andutility
.- Both
:core
and:app
modules may have dependencies on the:utility
module, but only if there is a need for specific utilities. - The
:utility
and:common-ui
module does not have any external dependencies.
This architecture promotes modularity and encapsulation by separating functionality into distinct modules. It allows for easier maintenance, reuse of modules across projects, and better management of dependencies between modules.
Dependencies | Description |
---|---|
Androidx |
provides a set of libraries and components that offer backward compatibility, enhanced functionality, and ease of development for Android apps. |
Material |
implifies the process of creating visually appealing and consistent user interfaces. |
LiveData |
allows you to store and observe data in a way that automatically updates the UI when the data changes. |
LifeCycle |
offers lifecycle-aware components and callbacks that allow developers to handle common lifecycle events. |
ViewModel |
allows you to store and manage data that is independent of the UI lifecycle, ensuring that data is retained even during screen rotations or other configuration changes. |
RxJava2 |
for doing asynchronous and executing event-based programs by using observable sequences. |
Retrofit2 |
construct the REST APIs and paging network data. |
Moshi |
modern JSON library for Kotlin and Java. |
Room |
construct a DB by creating an abstract layer on top of SQLite, which enables smooth and effortless access to the database. |
Glide |
library for Android that simplifies the process of loading and displaying images from network. |
Koin |
a dependency injection framework that facilitates the management and resolution of dependencies. |
Timber |
a logger with a small, extensible API. |
Shimmer |
simplifies the implementation of shimmering effects, enhancing the user experience and providing visual feedback during content loading. |
Mockito |
mocking framework that allows for the creation of mock objects in unit testing. |
JUnit |
simplifies the process of writing and running tests, allowing developers to verify the correctness of their code and catch potential issues early in the development cycle. |
and a lot more |
Clone this repository and make sure you're using the latest version of Android Studio
-
Run the project using
./gradlew assembleDebug
Feel free to contribute to this project & I Hope you found this repository useful