BakingApp uses a multi-module architecture to achieve:
- Faster build times (parallel compilation)
- Better separation of concerns
- Reusability of modules
- Clear dependency boundaries
┌─────────────┐
│ app │
└──────┬──────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────────┐
│features:login │ │ features:home │ │features:recipe- │
│ │ │ │ │ details │
└───────┬───────┘ └───────┬───────┘ └─────────┬─────────┘
│ │ │
└────────────────────┼──────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ core: │ │ core: │ │ core: │ │ core: │ │ core: │
│ network │ │ database │ │ security │ │ ui │ │ common │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
Entry point module
- Application class with Hilt
- MainActivity
- Navigation graph
- App-level configuration
- Theme providers
dependencies {
implementation(project(":features:login"))
implementation(project(":features:home"))
implementation(project(":features:recipe-details"))
implementation(project(":core:ui"))
// ... other core modules
}Shared utilities and base classes
- Result sealed class
- Base UseCase classes
- Coroutine dispatchers
- Flow extensions
- Common utilities
// No Android dependencies - pure Kotlin
dependencies {
api(libs.kotlinx.coroutines.core)
implementation(libs.hilt.android)
}Networking layer
- Retrofit setup
- OkHttp configuration
- API interfaces
- Network models (DTOs)
- Interceptors
- NetworkResponse handling
dependencies {
api(libs.retrofit)
api(libs.okhttp)
api(libs.moshi.kotlin)
implementation(project(":core:common"))
}Local persistence
- Room database
- DAOs
- Entity classes
- Database migrations
- Paging support
dependencies {
api(libs.room.runtime)
api(libs.room.ktx)
api(libs.paging.runtime)
ksp(libs.room.compiler)
}Security implementations
- EncryptedSharedPreferences
- Token management
- Secure storage
- Certificate pinning config
dependencies {
api(libs.androidx.security.crypto)
implementation(project(":core:network"))
}Reusable UI components
- Theme (colors, typography)
- Common composables
- Loading indicators
- Error views
- Text fields
- Buttons
dependencies {
api(platform(libs.androidx.compose.bom))
api(libs.androidx.compose.material3)
api(libs.coil.compose)
}Authentication feature
- Login screen
- LoginViewModel
- Login use cases
- Validation logic
- Auth repository
Home/recipes list feature
- Home screen
- HomeViewModel
- Recipe models
- Recipe repository
- Search functionality
Recipe details feature
- Detail screen
- DetailViewModel
- Ingredients list
- Steps list
- Favorite toggle
- Feature modules can depend on core modules
- Feature modules should NOT depend on other feature modules (except shared data models)
- Core modules can depend on other core modules
- app module depends on all feature modules and core:ui
- Domain layer has NO Android dependencies