Module Structure
Fluvius Framework is organized into independent modules that can be used together or separately.
Module Overview
Fluvius consists of several modules, each providing specific functionality:
fluvius/
├── domain/ # Core domain logic (CQRS, Event Sourcing)
├── fastapi/ # FastAPI integration
├── data/ # Data layer abstraction
├── worker/ # Background job processing
├── query/ # Query builder
├── media/ # Media/file management
├── casbin/ # Authorization (Casbin integration)
├── nava/ # Navigation/routing
└── manager/ # Application management
Domain Module
Purpose: Core domain logic with CQRS and event sourcing.
Key Components:
Domain: Main domain classAggregate: Business logic containerCommand: Command representationEvent: Event representationStateManager: State query interface
Dependencies:
datamodule (for data models)
Usage:
from fluvius.domain import Domain, Aggregate, action
FastAPI Module
Purpose: FastAPI integration for REST APIs.
Key Components:
FluviusFastAPI: FastAPI application wrapperDomainRouter: Automatic endpoint generationMiddleware: Request/response middleware
Dependencies:
domainmodule- FastAPI framework
Usage:
from fluvius.fastapi import FluviusFastAPI
Data Module
Purpose: Data layer abstraction and models.
Key Components:
DataModel: Base data model classDriver: Database driver interfacePostgreSQLDriver: PostgreSQL implementationMongoDBDriver: MongoDB implementationSQLiteDriver: SQLite implementation
Dependencies:
- None (core module)
Usage:
from fluvius.data import DataModel, field, PostgreSQLDriver
Worker Module
Purpose: Background job processing.
Key Components:
Worker: Worker instancetask: Task decoratorScheduler: Task scheduler
Dependencies:
- ARQ (Redis-based job queue)
Usage:
from fluvius.worker import Worker, task
Query Module
Purpose: Flexible query builder.
Key Components:
QueryBuilder: Query builder classFilter: Filter expressionsSort: Sort expressions
Dependencies:
datamodule
Usage:
from fluvius.query import QueryBuilder
Media Module
Purpose: File upload and storage.
Key Components:
MediaManager: Media managerStorageBackend: Storage backend interfaceLocalStorage: Local file storageS3Storage: AWS S3 storage
Dependencies:
- None (optional S3 support)
Usage:
from fluvius.media import MediaManager
Casbin Module
Purpose: Policy-based authorization.
Key Components:
CasbinEnforcer: Casbin enforcer wrapperPolicyAdapter: Policy storage adapter
Dependencies:
- Casbin library
Usage:
from fluvius.casbin import CasbinEnforcer
Nava Module
Purpose: Navigation and routing utilities.
Key Components:
- Navigation helpers
- Route generation
Dependencies:
domainmodule
Manager Module
Purpose: Application management and utilities.
Key Components:
- Application lifecycle
- Configuration management
- Service registration
Dependencies:
- Multiple modules
Module Dependencies
domain (core)
│
├──► data (required)
│
└──► casbin (optional)
fastapi
│
└──► domain (required)
worker
│
└──► domain (optional)
query
│
└──► data (required)
media
│
└──► (standalone)
casbin
│
└──► (standalone)
nava
│
└──► domain (required)
manager
│
└──► (depends on multiple)
Installing Modules
Install All Modules
pip install fluvius
Install Specific Modules
# Core domain module
pip install fluvius-domain
# FastAPI integration
pip install fluvius-fastapi
# Worker support
pip install fluvius-worker
Module Configuration
Domain Module
from fluvius.domain import Domain
class UserDomain(Domain):
__aggregate__ = UserAggregate
__namespace__ = 'app-user'
FastAPI Module
from fluvius.fastapi import FluviusFastAPI
app = FluviusFastAPI()
app.register_domain(UserDomain)
Data Module
from fluvius.data import PostgreSQLDriver
driver = PostgreSQLDriver(
connection_string="postgresql://user:pass@localhost/db"
)
Worker Module
from fluvius.worker import Worker
worker = Worker(redis_url="redis://localhost:6379")
Module Extensibility
Custom Drivers
Create custom database drivers:
from fluvius.data import Driver
class CustomDriver(Driver):
async def connect(self):
# Custom connection logic
pass
async def execute(self, query, params):
# Custom execution logic
pass
Custom Storage Backends
Create custom storage backends:
from fluvius.media import StorageBackend
class CustomStorage(StorageBackend):
async def upload(self, file, path):
# Custom upload logic
pass
Module Best Practices
1. Use Only What You Need
Don't install modules you don't use:
# Good: Only import what you need
from fluvius.domain import Domain
from fluvius.data import DataModel
# Bad: Import everything
from fluvius import *
2. Keep Modules Independent
Design domains to work independently:
# Good: Domain doesn't depend on FastAPI
class UserDomain(Domain):
__aggregate__ = UserAggregate
# Bad: Domain depends on FastAPI
class UserDomain(Domain):
def __init__(self, fastapi_app):
# Tight coupling
pass
3. Use Module Interfaces
Use interfaces, not implementations:
# Good: Use Driver interface
from fluvius.data import Driver
def process_data(driver: Driver):
# Works with any driver
pass
# Bad: Use specific implementation
from fluvius.data import PostgreSQLDriver
def process_data(driver: PostgreSQLDriver):
# Tightly coupled
pass
Next Steps
- Learn about Tech Stack
- Explore Design Patterns
- Check Core Components