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;
Check all the dependencies
- the app is written in
Kotlin
; Coroutines
is the only lib used for async operations;- Java17+ APIs are available via desugaring;
Per Context (in terms of DDD) UseCase->Repository->DataSource pattern is implemented with non-base own interfaces.
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
The DI is built with Koin and fully belongs to the App module.
We do unit test only for new: JUnit4 is used with the help of mockk
.