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; Coroutinesis 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.