A clean architecture example. Using Kotlin Flow, Retrofit and Dagger Hilt, etc.
Architecture means the overall design of the project. It’s the organization of the code into classes or files or components or modules. And it’s how all these groups of code relate to each other. The architecture defines where the application performs its core functionality and how that functionality interacts with things like the database and the user interface.
Clean architecture refers to organizing the project so that it’s easy to understand and easy to change as the project grows. This doesn’t happen by chance. It takes intentional planning.
- If you want a db cache using room db, go here
- This android app using backend from this repo
- If you want tutorial how to create this app step by step, go to this youtube playlist.
I created this app just for example how to implement clean architecture on android. It really biased to my preference and experience. Also, clean architecture is not mandatory to do. If you feel that you/your team are taking so much benefit by implementing this design pattern, then go for it. Otherwise, don't use it or just modify to you/your team preferences. This app have little bug. If you go from FragmentA to FragmentB, then go back, the fragmentA re render again. I Know how to fix it but I dont have time to do it. Search for "retain fragment jetpack navigation", use the newest solution
There are 3 layer in this app.
Presentation Layer | Domain Layer | Data Layer |
---|---|---|
your ui/view | entity | data source, dto |
your viewmodel | usecase | repository implementation |
probably your extension | repository interface | your library config(retrofit/room) |
etc... | etc.. | etc... |
Presentation Layer | Something in Between | Domain Layer | Data Layer | Outer data layer |
---|---|---|---|---|
LoginActivity & LoginViewModel | <- LoginUseCase -> | <- LoginRepository (interface) -> | <- LoginRepositoryImplementation | DataSource |