Android shopping app built with MVVM Clean Architecture consuming FAKE STORE API
Product Screen | Product Detail Screen | Profile Screen |
---|---|---|
WishList Screen | Cart Screen | Search Screen |
---|---|---|
Edit Profile Screen | Splash Screen | Login Screen |
---|---|---|
- Kotlin - Kotlin is a programming language that can run on JVM. Google has announced Kotlin as one of its officially supported programming languages in Android Studio; and the Android community is migrating at a pace from Java to Kotlin.
- Android KTX - Android KTX is a set of Kotlin extensions that are included with Android Jetpack and other Android libraries. KTX extensions provide concise, idiomatic Kotlin to Jetpack, Android platform, and other APIs.
- AndroidX - Major improvement to the original Android Support Library, which is no longer maintained.
- Lifecycle - Lifecycle-aware components perform actions in response to a change in the lifecycle status of another component, such as activities and fragments. These components help you produce better-organized, and often lighter-weight code, that is easier to maintain.
- ViewModel -The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way.
- Room database - The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite.
- Kotlin Coroutines - A concurrency design pattern that you can use on Android to simplify code that executes asynchronously.
- Retrofit - Retrofit is a REST client for Java/ Kotlin and Android by Square inc under Apache 2.0 license. Its a simple network library that is used for network transactions. By using this library we can seamlessly capture JSON response from web service/web API.
- GSON - JSON Parser,used to parse requests on the data layer for Entities and understands Kotlin non-nullable and default parameters.
- Kotlin Flow - In coroutines, a flow is a type that can emit multiple values sequentially, as opposed to suspend functions that return only a single value.
- Dagger Hilt - A dependency injection library for Android that reduces the boilerplate of doing manual dependency injection in your project.
- Logging Interceptor - logs HTTP request and response data.
- Glide - Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.
- Download the file or clone the repo and
- Open it in Android Studio
This is not a production ready shopping application
I used Model View View-Model (MVVM), repository pattern, and clean architecture. I used all 3 together to achieve a more structured code and less tight coupling between components. At a high level, I have 3 layers in the project which I have implemented as packages, all in one module. These layers include:
Data Layer:
Responsible for getting data from any source, whether the local source or remote source. For this project, I implemented the remote data source FAKE STORE API with Retrofit and the local data source with ROOM DatabaseDomain layer:
Houses the core business logic of the app, interacting with the data layer via an abstraction (Repository Interface), afterward returning data to the UI layer.Presentation layer:
Responsible for displaying content on the screen. The View-Model in this layer is responsible for interacting with the domain layer via a use-case class to send and retrieve data, based on user actions.
- Unit Test: A higher test coverage would be nice to have
- Pagination: Need to add pagination.
Feel free to contribute to this project ):
- Harum Shidiqi - UI inspiration came from this beautiful Behance project