-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Description
┌─────────────────────────────────────────────────────────────────────────┐
│ FEATURE MODULES (feature/*) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Presentation Layer │ │
│ │ ┌──────────────┐ ┌─────────────────────────┐ │ │
│ │ │ Screen │◄───│ ViewModel │ │ │
│ │ │ (Compose) │ │ (StateFlow<UiState>) │ │ │
│ │ └──────────────┘ └───────────┬─────────────┘ │ │
│ │ │ │ │
│ └───────────────────────────────────┼─────────────────────────────┘ │
│ │ Dependencies │
├───────────────────────────────────────┼──────────────────────────────────┤
│ CORE/DOMAIN Module │ │
│ ┌────────────────────────────────────▼──────────────────────┐ │
│ │ Domain Layer │ │
│ │ ┌────────────────────────────────────────────────────┐ │ │
│ │ │ Use Cases │ │ │
│ │ │ (combine/transform logic) │ │ │
│ │ └───────────────────────┬────────────────────────────┘ │ │
│ │ ┌───────────────────────▼────────────────────────────┐ │ │
│ │ │ Repository Interfaces │ │ │
│ │ │ (contracts for data layer) │ │ │
│ │ └───────────────────────┬────────────────────────────┘ │ │
│ │ ┌───────────────────────▼────────────────────────────┐ │ │
│ │ │ Domain Models │ │ │
│ │ │ (business entities) │ │ │
│ │ └────────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ Dependencies │
├───────────────────────────────────────┼──────────────────────────────────┤
│ CORE/DATA Module │ │
│ ┌────────────────────────────────────▼──────────────────────┐ │
│ │ Data Layer │ │
│ │ ┌────────────────────────────────────────────────────┐ │ │
│ │ │ Repository Implementations │ │ │
│ │ │ (offline-first, single source of truth) │ │ │
│ │ └─────────┬─────────────────────┬────────────────────┘ │ │
│ │ │ │ │ │
│ │ ┌─────────▼─────────┐ ┌───────▼──────────────┐ │ │
│ │ │ Local DataSource │ │ Remote DataSource │ │ │
│ │ │ (Room + DAO) │ │ (Retrofit) │ │ │
│ │ └─────────┬─────────┘ └──────────────────────┘ │ │
│ │ │ │ │
│ │ ┌─────────▼──────────────────────────────────────┐ │ │
│ │ │ Data Models │ │ │
│ │ │ (Entity, DTO, Response objects) │ │ │
│ │ └────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
├───────────────────────────────────────────────────────────────────────┤
│ CORE/UI Module (shared UI resources) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ UI Layer │ │
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
│ │ │ Shared UI Components │ │ │
│ │ │ (Buttons, Cards, Dialogs, etc.) │ │ │
│ │ └─────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
│ │ │ Themes & Design System │ │ │
│ │ │ (Colors, Typography, Shapes) │ │ │
│ │ └─────────────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
│ │ │ Base ViewModels / State Management │ │ │
│ │ │ (BaseViewModel, UiState, etc.) │ │ │
│ │ └─────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────┘
Module Dependencies Flow:
feature/* → core/domain → core/data → core/ui
↑ ↑
(interface) (implementation)
Why?
Key Changes in Multi-Module Architecture:
-
Feature Modules (
feature/*)- Each feature is a separate module (e.g.,
feature-home,feature-auth,feature-settings) - Contains only presentation layer code for that specific feature
- Depends on
core/domainfor business logic - May depend on
core/uifor shared UI components
- Each feature is a separate module (e.g.,
-
Core/Domain Module (
:core:domain)- Pure Kotlin module (no Android dependencies)
- Contains: UseCases, Repository Interfaces, Domain Models
- Defines contracts that
core/datamust implement - Single source of business rules
-
Core/Data Module (
:core:data)- Implements repository interfaces from
core/domain - Contains: Repository implementations, DataSources, Data Models
- Manages data orchestration (offline-first, caching)
- Handles mapping between data and domain models
- Implements repository interfaces from
-
Core/UI Module (
:core:ui)- Shared UI resources across features
- Contains: Base ViewModels, Common Composable components, Themes, Design System
- Optional dependency for feature modules
- Reduces duplication across features
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels