Skip to content

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.