Principles

  • Separation of concerns
  • Drive UI from data models
  • Single source of truth
  • Unidirectional data flow (States & events flow in opposite directions)

Modules

app
domain (optional)
data

Data flow

Example folder structure

// Android project

  ├── MyWeatherApplication.kt
├── data
│   ├── repositories
│   └── source
│       ├── device
│       └── weather
├── domain
│   ├── models
│   └── use_cases
│       ├── device
│       └── weather
├── infrastructure
│   └── di
└── presentation
    ├── framework
    │   └── theme
    └── screen
        ├── home
        │   └── model
        ├── settings
        └── weather_detail