Skip to content

[SUGGESTION]: Multi-Module Architecture #2

@Drjacky

Description

@Drjacky
┌─────────────────────────────────────────────────────────────────────────┐
│                     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:

  1. 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/domain for business logic
    • May depend on core/ui for shared UI components
  2. Core/Domain Module (:core:domain)

    • Pure Kotlin module (no Android dependencies)
    • Contains: UseCases, Repository Interfaces, Domain Models
    • Defines contracts that core/data must implement
    • Single source of business rules
  3. 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
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions