Moove Android App¶
🏛 Architecture overview¶
Modules 🐘¶
The app consists of several gradle modules:
- app
– the main module which setups other modules together, along with the top-level navigation and DI.
It also contains legacy features implementation that would be extracted in the future;
tickets/featureX
- concrete standalone feature implementation, e.g. search, bookings, etc.;core
- project-agnostic language tools & extensions shared with other modules;shared
- basic components and business rules to re-use across the app and feature modules:features
- shared features which could be reused in the app directly as the business rules (use cases): GetSessionUseCase or SubscribeToAccountUseCase, etc;presentation
- basic presentation-level reusable components;
design-system
- common resources: styles, themes, drawables, strings;
Components ❖¶
Check all the dependencies
Core/Language¶
- the app is written in
Kotlin
; Coroutines
is the only lib used for async operations;- Java17+ APIs are available via desugaring;
Domain/Data¶
Per Context (in terms of DDD) UseCase->Repository->DataSource pattern is implemented with non-base own interfaces.
Presentation¶
The app is built mainly with AndroidX
components: Navigation, Fragment and ViewModel.
The ViewModel itself is often set up in a MVI manner with the help of Orbit-MVI
DI¶
The DI is built with Koin and fully belongs to the App module.
Testing¶
We do unit test only for new: JUnit4 is used with the help of mockk
.