Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mutualmobile/Praxis
Example Android project using MVVM, DaggerAndroid, Jetpack Compose, Retrofit, Coroutines and Multi module architecture ✌🏽
https://github.com/mutualmobile/Praxis
android androidx corou dagger2 dagger2-android databinding jetpack-components jetpack-compose kotlin kotlin-android mvvm rxjava rxjava-android
Last synced: 3 months ago
JSON representation
Example Android project using MVVM, DaggerAndroid, Jetpack Compose, Retrofit, Coroutines and Multi module architecture ✌🏽
- Host: GitHub
- URL: https://github.com/mutualmobile/Praxis
- Owner: mutualmobile
- License: apache-2.0
- Created: 2019-11-11T14:44:59.000Z (almost 5 years ago)
- Default Branch: baseproject
- Last Pushed: 2023-05-12T12:45:07.000Z (over 1 year ago)
- Last Synced: 2024-06-25T09:40:51.380Z (5 months ago)
- Topics: android, androidx, corou, dagger2, dagger2-android, databinding, jetpack-components, jetpack-compose, kotlin, kotlin-android, mvvm, rxjava, rxjava-android
- Language: Kotlin
- Homepage:
- Size: 6.55 MB
- Stars: 358
- Watchers: 10
- Forks: 47
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-android-kotlin-apps - Praxis
README
# Praxis
2022 Hit Refresh! Praxis now loves ❤️ Jetpack Compose
This is a sample app written in Kotlin following clean architecture principles which uses slack app features as an example.
The purpose of this app to showcase:
- Implementation of Jetpack Android Architecture components with Dagger Hilt and Data Binding to minimize boilerplate code.
- Implementation of an architecture that will support both XML and the new Compose.
- Implementation of Modular Multi Module Navigation Architecture.
- Performing background task with Kotlin Coroutines# Requirements
1. Android Studio : Arctic Fox | 2020.3.1 3.1 or higher
2. Android Emulator or Physical android device# Built With 🏗
| Tools | Link |
| :--- | :---: |
| 🤖 Kotlin | [Kotlin](https://kotlinlang.org/) |
| 🏛 Architecture Components | [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) |
| ⛓ Data Binding | [Android Data Binding](https://developer.android.com/topic/libraries/data-binding) |
| 💉 Dagger Hilt | [Dagger Hilt](https://developer.android.com/training/dependency-injection/hilt-android) |
| 🌐 Retrofit | [Retrofit](http://square.github.io/retrofit/) |
| 🚦 OkHttp | [OkHttp](http://square.github.io/okhttp/) |
| 📄 Gson Parsing | [Gson](https://github.com/google/gson) |
| 🌊 Coroutines | [Kotlin Coroutines](https://developer.android.com/kotlin/coroutines) |
| 🏄🏼♀️ Flows | [Flows](https://developer.android.com/kotlin/flow) |## Architecture
### Praxis follows the principles of Clean Architecture with Android Architecture Components.### Architecture's layers & boundaries:
**Presentation Layer** contains _UI (Activities & Fragments)_ that are coordinated by _ViewModels which execute 1 or multiple UseCases._ Presentation Layer depends on Domain Layer.
**Domain Layer** is the most INNER part of the circle (no dependencies with other layers) and it contains _Entities, Use cases & Repository Interfaces._ Use cases combine data from 1 or multiple Repository Interfaces.
**Data Layer** contains _Repository Implementations and 1 or multiple Data Sources._ Repositories are responsible to coordinate data from the different Data Sources. Data Layer depends on Domain Layer.
**Notes:** Mapping between response models and transformed models will happen via extension functions defined in transformed model file
### Conventions:
Files are suffixed with be defined Class types.
- ViewModels are suffixed with **VM**. Ex: `LoginVM`
- UseCases are suffixed with **UseCase**. Ex: `LoginUseCase`
- Sources are suffixed with **Source**. Ex: `LoginRemoteSource`, `LoginLocalSource`
- Repositories are suffixed with **Repo**. Ex: `LoginRepo`## Conclusion
This project can be used as a template for new apps.
This project is continually evolving to integrate other libraries and techniques to keep it up to date.